DBPatch.cs 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061
  1. using MeterVision.model;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data.SQLite;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace MeterVision.db
  9. {
  10. public class DBPatch
  11. {
  12. public static bool InsertTPatch(TPatch tPatch)
  13. {
  14. // 构建插入的 SQL 语句
  15. string sql = "INSERT INTO t_patch (patch_id, create_time, patch_name,stand_id,stand_name) " +
  16. "VALUES (@PatchId, @CreateTime, @PatchName, @StandId, @StandName)";
  17. // 创建参数数组
  18. SQLiteParameter[] parameters = new SQLiteParameter[]
  19. {
  20. new SQLiteParameter("@PatchId", tPatch.PatchId),
  21. new SQLiteParameter("@CreateTime", tPatch.CreateTime),
  22. new SQLiteParameter("@PatchName", tPatch.PatchName),
  23. new SQLiteParameter("@StandId", tPatch.StandId),
  24. new SQLiteParameter("@StandName", tPatch.StandName),
  25. };
  26. try
  27. {
  28. // 调用 SQLiteHelper 执行插入操作
  29. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  30. // 如果插入成功,返回 true,否则返回 false
  31. return rowsAffected > 0;
  32. }
  33. catch (Exception ex)
  34. {
  35. // 处理异常(如果有的话)
  36. Console.WriteLine("Error inserting data: " + ex.Message);
  37. return false;
  38. }
  39. }
  40. public static bool DeletePatchAndDetails(string patchId)
  41. {
  42. // 定义删除的 SQL 语句,使用事务来保证一致性
  43. string sql = @"
  44. BEGIN TRANSACTION;
  45. -- 删除 t_patch_detail 表中与 stand_id 相关的数据
  46. DELETE FROM t_patch_detail WHERE patch_id = @PatchId;
  47. -- 删除 t_patch 表中与 patch_id 相关的数据
  48. DELETE FROM t_patch WHERE patch_id = @PatchId;
  49. COMMIT;";
  50. // 创建参数
  51. SQLiteParameter[] parameters = new SQLiteParameter[]
  52. {
  53. new SQLiteParameter("@PatchId", patchId)
  54. };
  55. try
  56. {
  57. // 执行 SQL 删除操作
  58. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  59. // 返回是否成功删除
  60. return rowsAffected > 0;
  61. }
  62. catch (Exception ex)
  63. {
  64. // 处理异常(如果有的话)
  65. Console.WriteLine("Error deleting data: " + ex.Message);
  66. return false;
  67. }
  68. }
  69. public static Tuple<int,int, List<VPatch>> GetPagedVPatchs(int pageNumber, int pageSize)
  70. {
  71. // 计算 OFFSET 值
  72. int offset = (pageNumber - 1) * pageSize;
  73. // 定义 SQL 查询语句,带有分页
  74. string sql = @"
  75. SELECT patch_id, create_time, patch_name, stand_id, stand_name,
  76. detail_count,run_count,equal_count,invalid_count,error_count
  77. FROM v_patch ORDER BY create_time DESC
  78. LIMIT @PageSize OFFSET @Offset;";
  79. // 创建 SQL 参数
  80. SQLiteParameter[] parameters = new SQLiteParameter[]
  81. {
  82. new SQLiteParameter("@PageSize", pageSize),
  83. new SQLiteParameter("@Offset", offset)
  84. };
  85. // 执行查询并获取结果
  86. List<VPatch> patchs = new List<VPatch>();
  87. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  88. {
  89. while (reader.Read())
  90. {
  91. // 将查询结果映射到 TStand 对象
  92. VPatch patch = new VPatch
  93. {
  94. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  95. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  96. PatchName = reader.GetString(reader.GetOrdinal("patch_name")),
  97. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  98. StandName = reader.GetString(reader.GetOrdinal("stand_name")),
  99. DetailCount = reader.GetInt32(reader.GetOrdinal("detail_count")),
  100. RunCount = reader.GetInt32(reader.GetOrdinal("run_count")),
  101. EqualCount = reader.GetInt32(reader.GetOrdinal("equal_count")),
  102. InvalidCount = reader.GetInt32(reader.GetOrdinal("invalid_count")),
  103. ErrorCount = reader.GetInt32(reader.GetOrdinal("error_count"))
  104. };
  105. patchs.Add(patch);
  106. }
  107. }
  108. // 获取总记录数,用于计算总页数
  109. string countSql = "SELECT COUNT(*) FROM v_patch";
  110. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql));
  111. // 计算总页数
  112. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  113. // 返回元组,包含总页数和结果列表
  114. return Tuple.Create(totalRecords,totalPages, patchs);
  115. }
  116. public static bool InsertPatchDetail(TPatchDetail patchDetail)
  117. {
  118. // 插入SQL语句
  119. string sql = @"
  120. INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image)
  121. VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage);";
  122. // 定义参数
  123. SQLiteParameter[] parameters = new SQLiteParameter[]
  124. {
  125. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  126. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  127. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  128. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  129. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  130. new SQLiteParameter("@SrcImage", patchDetail.SrcImage)
  131. };
  132. // 执行插入操作
  133. try
  134. {
  135. int rowsAffected = SQLiteHelper.ExecuteNonQuery(sql, parameters);
  136. return rowsAffected > 0; // 返回是否成功插入
  137. }
  138. catch (Exception ex)
  139. {
  140. // 处理异常
  141. Console.WriteLine(ex.Message);
  142. return false;
  143. }
  144. }
  145. public static bool InsertPatchDetails(List<TPatchDetail> patchDetails)
  146. {
  147. // 插入SQL语句
  148. string sql = @"
  149. INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image)
  150. VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage);";
  151. try
  152. {
  153. // 开始事务
  154. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  155. {
  156. connection.Open();
  157. using (SQLiteTransaction transaction = connection.BeginTransaction())
  158. {
  159. // 遍历列表插入每一条数据
  160. foreach (var patchDetail in patchDetails)
  161. {
  162. SQLiteParameter[] parameters = new SQLiteParameter[]
  163. {
  164. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  165. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  166. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  167. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  168. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  169. new SQLiteParameter("@SrcImage", patchDetail.SrcImage)
  170. };
  171. // 执行插入操作
  172. SQLiteHelper.ExecuteNonQuery(sql, parameters, transaction);
  173. }
  174. // 提交事务
  175. transaction.Commit();
  176. }
  177. }
  178. return true;
  179. }
  180. catch (Exception ex)
  181. {
  182. // 处理异常
  183. Console.WriteLine(ex.Message);
  184. return false;
  185. }
  186. }
  187. //根据识别结果修改表内容
  188. public static bool UpdatePatchDetailWithResult(TPatchDetail detail)
  189. {
  190. string sql = @"
  191. UPDATE t_patch_detail
  192. SET run_flag = @RunFlag,
  193. run_time = @RunTime,
  194. dst_image = @DstImage,
  195. result_meter = @ResultMeter,
  196. result_type = @ResultType,
  197. raw_value = @RawValue,
  198. final_value = @FinalValue,
  199. complete_value = @CompleteValue,
  200. equal_flag = @EqualFlag,
  201. ai_ver = @AiVer,
  202. debug_info = @DebugInfo,
  203. log_path = @LogPath
  204. WHERE patch_detail_id = @PatchDetailId;";
  205. // 创建 SQL 参数
  206. SQLiteParameter[] parameters = new SQLiteParameter[]
  207. {
  208. new SQLiteParameter("@PatchDetailId", detail.PatchDetailId),
  209. new SQLiteParameter("@RunFlag", detail.RunFlag),
  210. new SQLiteParameter("@RunTime", detail.RunTime),
  211. new SQLiteParameter("@DstImage", detail.DstImage),
  212. new SQLiteParameter("@ResultMeter", detail.ResultMeter),
  213. new SQLiteParameter("@ResultType", detail.ResultType),
  214. new SQLiteParameter("@RawValue", detail.RawValue),
  215. new SQLiteParameter("@FinalValue", detail.FinalValue),
  216. new SQLiteParameter("@CompleteValue",detail.CompleteValue),
  217. new SQLiteParameter("@EqualFlag", detail.EqualFlag),
  218. new SQLiteParameter("@AiVer", detail.AiVer),
  219. new SQLiteParameter("@DebugInfo", detail.DebugInfo),
  220. new SQLiteParameter("@LogPath", detail.LogPath)
  221. };
  222. // 执行更新操作并返回受影响的行数
  223. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  224. }
  225. public static bool UpdatePatchDetailStandValue(string patchDetailId,string standValue,int equalFlag)
  226. {
  227. string sql = @"
  228. UPDATE t_patch_detail
  229. SET stand_value = @StandValue,
  230. equal_flag = @EqualFlag
  231. WHERE patch_detail_id = @PatchDetailId;";
  232. // 创建 SQL 参数
  233. SQLiteParameter[] parameters = new SQLiteParameter[]
  234. {
  235. new SQLiteParameter("@PatchDetailId", patchDetailId),
  236. new SQLiteParameter("@EqualFlag", equalFlag),
  237. new SQLiteParameter("@StandValue", standValue)
  238. };
  239. // 执行更新操作并返回受影响的行数
  240. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  241. }
  242. //同时插入t_patch与t_patch_detail(在一个事务中)
  243. public static bool InsertPatchAndDetails(TPatch patch, List<TPatchDetail> patchDetails)
  244. {
  245. try
  246. {
  247. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  248. {
  249. connection.Open();
  250. using (SQLiteTransaction transaction = connection.BeginTransaction())
  251. {
  252. // 插入 t_patch 表
  253. string patchSql = "INSERT INTO t_patch (patch_id, create_time, patch_name, stand_id, stand_name) VALUES (@PatchId, @CreateTime, @PatchName, @StandId, @StandName)";
  254. SQLiteParameter[] patchParams = new SQLiteParameter[]
  255. {
  256. new SQLiteParameter("@PatchId", patch.PatchId),
  257. new SQLiteParameter("@CreateTime", patch.CreateTime),
  258. new SQLiteParameter("@PatchName", patch.PatchName),
  259. new SQLiteParameter("@StandId", patch.StandId),
  260. new SQLiteParameter("@StandName", patch.StandName)
  261. };
  262. SQLiteHelper.ExecuteNonQuery(patchSql, patchParams, transaction);
  263. // 插入 t_patch_detail 表
  264. foreach (var patchDetail in patchDetails)
  265. {
  266. //string detailSql = "INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image) VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage)";
  267. string detailSql = @"
  268. INSERT INTO t_patch_detail (
  269. patch_detail_id, patch_id, create_time,
  270. stand_detail_id, stand_value, src_image,
  271. sample_time, station_key, station_id,
  272. meter_type, bright_val, flow_rate,
  273. digit_count, pointer_count, last_unit,
  274. meter_region, feature_region, last_compress,
  275. latest_value, latest_time, latest_complete
  276. ) VALUES (
  277. @PatchDetailId, @PatchId, @CreateTime,
  278. @StandDetailId, @StandValue, @SrcImage,
  279. @SampleTime, @StationKey, @StationId,
  280. @MeterType, @BrightVal, @FlowRate,
  281. @DigitCount, @PointerCount, @LastUnit,
  282. @MeterRegion, @FeatureRegion, @LastCompress,
  283. @LatestValue, @LatestTime, @LatestComplete
  284. )";
  285. SQLiteParameter[] detailParams = new SQLiteParameter[]
  286. {
  287. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  288. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  289. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  290. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  291. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  292. new SQLiteParameter("@SrcImage", patchDetail.SrcImage),
  293. new SQLiteParameter("@SampleTime", patchDetail.SampleTime),
  294. new SQLiteParameter("@StationKey", patchDetail.StationKey),
  295. new SQLiteParameter("@StationId", patchDetail.StationId),
  296. new SQLiteParameter("@MeterType", patchDetail.MeterType),
  297. new SQLiteParameter("@BrightVal", patchDetail.BrightVal),
  298. new SQLiteParameter("@FlowRate", patchDetail.FlowRate),
  299. new SQLiteParameter("@DigitCount", patchDetail.DigitCount),
  300. new SQLiteParameter("@PointerCount", patchDetail.PointerCount),
  301. new SQLiteParameter("@LastUnit", patchDetail.LastUnit),
  302. new SQLiteParameter("@MeterRegion", patchDetail.MeterRegion),
  303. new SQLiteParameter("@FeatureRegion", patchDetail.FeatureRegion),
  304. new SQLiteParameter("@LastCompress", patchDetail.LastCompress),
  305. new SQLiteParameter("@LatestValue", patchDetail.LatestValue),
  306. new SQLiteParameter("@LatestTime", patchDetail.LatestTime),
  307. new SQLiteParameter("@LatestComplete", patchDetail.LatestComplete),
  308. };
  309. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  310. }
  311. // 提交事务
  312. transaction.Commit();
  313. return true;
  314. }
  315. }
  316. }
  317. catch (Exception ex)
  318. {
  319. Console.WriteLine($"插入数据失败:{ex.Message}");
  320. return false;
  321. }
  322. }
  323. public static bool UpdatePatchDetails_Latest(List<TPatchDetail> patchDetails)
  324. {
  325. try
  326. {
  327. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  328. {
  329. connection.Open();
  330. using (SQLiteTransaction transaction = connection.BeginTransaction())
  331. {
  332. // 插入 t_patch_detail 表
  333. foreach (var patchDetail in patchDetails)
  334. {
  335. // 更新 t_patch_detail 表(仅涉及的字段)
  336. string detailSql = @"
  337. UPDATE t_patch_detail
  338. SET latest_value = @LatestValue,
  339. latest_time = @LatestTime,
  340. latest_complete = @LatestComplete,
  341. last_compress = @LastCompress
  342. WHERE patch_detail_id = @PatchDetailId;";
  343. SQLiteParameter[] detailParams = new SQLiteParameter[]
  344. {
  345. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  346. new SQLiteParameter("@LastCompress", patchDetail.LastCompress),
  347. new SQLiteParameter("@LatestValue", patchDetail.LatestValue),
  348. new SQLiteParameter("@LatestTime", patchDetail.LatestTime),
  349. new SQLiteParameter("@LatestComplete", patchDetail.LatestComplete),
  350. };
  351. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  352. }
  353. // 提交事务
  354. transaction.Commit();
  355. return true;
  356. }
  357. }
  358. }
  359. catch (Exception ex)
  360. {
  361. Console.WriteLine($"插入数据失败:{ex.Message}");
  362. return false;
  363. }
  364. }
  365. public static bool UpdatePatchDetails_Latest(TPatchDetail patchDetail)
  366. {
  367. try
  368. {
  369. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  370. {
  371. connection.Open();
  372. // 更新 t_patch_detail 表(仅涉及的字段)
  373. string detailSql = @"
  374. UPDATE t_patch_detail
  375. SET latest_value = @LatestValue,
  376. latest_time = @LatestTime,
  377. latest_complete = @LatestComplete,
  378. last_compress = @LastCompress
  379. WHERE patch_detail_id = @PatchDetailId;";
  380. SQLiteParameter[] detailParams = new SQLiteParameter[]
  381. {
  382. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  383. new SQLiteParameter("@LastCompress", patchDetail.LastCompress),
  384. new SQLiteParameter("@LatestValue", patchDetail.LatestValue),
  385. new SQLiteParameter("@LatestTime", patchDetail.LatestTime),
  386. new SQLiteParameter("@LatestComplete", patchDetail.LatestComplete),
  387. };
  388. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams);
  389. return true;
  390. }
  391. }
  392. catch (Exception ex)
  393. {
  394. Console.WriteLine($"插入数据失败:{ex.Message}");
  395. return false;
  396. }
  397. }
  398. public static Tuple<int, int, List<TPatchDetail>> GetPagedPatchDetails(int pageNumber, int pageSize, string patchId)
  399. {
  400. // 计算偏移量
  401. int offset = (pageNumber - 1) * pageSize;
  402. // 分页查询SQL
  403. //string sql = @"
  404. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  405. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  406. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  407. // FROM t_patch_detail WHERE patch_id = @PatchId
  408. // ORDER BY create_time DESC -- 根据需要修改排序字段
  409. // LIMIT @PageSize OFFSET @Offset;";
  410. string sql = @"
  411. SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  412. run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  413. last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path, memo
  414. FROM t_patch_detail WHERE patch_id = @PatchId
  415. ORDER BY create_time ASC -- 根据需要修改排序字段
  416. LIMIT @PageSize OFFSET @Offset;";
  417. // 定义参数
  418. SQLiteParameter[] parameters = new SQLiteParameter[]
  419. {
  420. new SQLiteParameter("@PatchId", patchId),
  421. new SQLiteParameter("@PageSize", pageSize),
  422. new SQLiteParameter("@Offset", offset)
  423. };
  424. // 执行查询并读取数据
  425. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  426. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  427. {
  428. while (reader.Read())
  429. {
  430. // 将查询结果映射到 TPatchDetail 对象
  431. TPatchDetail patchDetail = new TPatchDetail
  432. {
  433. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  434. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  435. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  436. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  437. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  438. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  439. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  440. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  441. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  442. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  443. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  444. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  445. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  446. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  447. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  448. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  449. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  450. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  451. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  452. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  453. Memo = reader.GetString(reader.GetOrdinal("memo"))
  454. };
  455. patchDetails.Add(patchDetail);
  456. }
  457. }
  458. // 获取总记录数,用于计算总页数
  459. string countSql = "SELECT COUNT(*) FROM t_patch_detail WHERE patch_id = @PatchId";
  460. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, new SQLiteParameter("@PatchId", patchId)));
  461. // 计算总页数
  462. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  463. // 返回总记录数、总页数和分页结果
  464. return Tuple.Create(totalRecords, totalPages, patchDetails);
  465. }
  466. public static Tuple<int, int, List<TPatchDetail>> GetPagedPatchDetails(PatchFindModel findModel)
  467. {
  468. // 计算偏移量
  469. int offset = (findModel.PageNumber - 1) * findModel.PageSize;
  470. // 动态构造 WHERE 子句
  471. StringBuilder whereClause = new StringBuilder("WHERE patch_id = @PatchId");
  472. List<SQLiteParameter> parameters = new List<SQLiteParameter>
  473. {
  474. new SQLiteParameter("@PatchId", findModel.PatchId),
  475. new SQLiteParameter("@PageSize", findModel.PageSize),
  476. new SQLiteParameter("@Offset", offset)
  477. };
  478. if (findModel.RunFlag >= 0)
  479. {
  480. whereClause.Append(" AND run_flag = @RunFlag");
  481. parameters.Add(new SQLiteParameter("@RunFlag", findModel.RunFlag));
  482. }
  483. if (findModel.EqualFlag >= 0)
  484. {
  485. whereClause.Append(" AND equal_flag = @EqualFlag");
  486. parameters.Add(new SQLiteParameter("@EqualFlag", findModel.EqualFlag));
  487. }
  488. if(findModel.PatchFindType == Patch.PatchFindType.HAVE_MEMO)
  489. {
  490. whereClause.Append(" AND memo != ''");
  491. //parameters.Add(new SQLiteParameter("@EqualFlag", findModel.EqualFlag));
  492. }
  493. //if (findModel.EqualFlag == 2) // 针对无标准值的查询条件
  494. //{
  495. // whereClause.Append(" AND stand_value = ''");
  496. //}
  497. // 分页查询SQL
  498. //string sql = $@"
  499. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  500. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  501. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path, memo
  502. // FROM t_patch_detail
  503. // {whereClause}
  504. // ORDER BY create_time ASC -- 根据需要修改排序字段
  505. // LIMIT @PageSize OFFSET @Offset;";
  506. string sql = $@"
  507. SELECT * FROM t_patch_detail
  508. {whereClause}
  509. ORDER BY station_id,sample_time ASC
  510. LIMIT @PageSize OFFSET @Offset;";
  511. // 执行查询并读取数据
  512. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  513. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters.ToArray()))
  514. {
  515. while (reader.Read())
  516. {
  517. TPatchDetail patchDetail = new TPatchDetail
  518. {
  519. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  520. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  521. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  522. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  523. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  524. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  525. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  526. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  527. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  528. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  529. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  530. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  531. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  532. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  533. ValueChanged = reader.GetInt32(reader.GetOrdinal("value_changed")),
  534. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  535. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  536. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  537. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  538. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  539. Memo = reader.GetString(reader.GetOrdinal("memo")),
  540. StationKey = reader.GetString(reader.GetOrdinal("station_key")),
  541. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  542. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  543. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  544. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  545. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  546. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  547. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  548. MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  549. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  550. LastCompress = reader.GetInt32(reader.GetOrdinal("last_compress")),
  551. LatestValue = reader.GetInt64(reader.GetOrdinal("latest_value")),
  552. LatestTime = reader.GetString(reader.GetOrdinal("latest_time")),
  553. LatestComplete = reader.GetInt64(reader.GetOrdinal("latest_complete"))
  554. };
  555. patchDetails.Add(patchDetail);
  556. }
  557. }
  558. // 获取总记录数,用于计算总页数
  559. string countSql = "SELECT COUNT(*) FROM t_patch_detail " + whereClause;
  560. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters.ToArray()));
  561. // 计算总页数
  562. int totalPages = (int)Math.Ceiling((double)totalRecords / findModel.PageSize);
  563. // 返回总记录数、总页数和分页结果
  564. return Tuple.Create(totalRecords, totalPages, patchDetails);
  565. }
  566. public static VPatch GetVPatchById(string patchId)
  567. {
  568. VPatch vPatch = null;
  569. // 查询 SQL,从 v_patch 视图中获取数据
  570. string query = @"
  571. SELECT
  572. patch_id,
  573. create_time,
  574. patch_name,
  575. stand_id,
  576. stand_name,
  577. detail_count,
  578. run_count,
  579. equal_count,
  580. invalid_count,
  581. error_count
  582. FROM v_patch
  583. WHERE patch_id = @PatchId;";
  584. // 构造参数
  585. SQLiteParameter[] parameters = new SQLiteParameter[]
  586. {
  587. new SQLiteParameter("@PatchId", patchId)
  588. };
  589. // 执行查询
  590. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  591. {
  592. if (reader.Read())
  593. {
  594. vPatch = new VPatch
  595. {
  596. PatchId = reader["patch_id"].ToString(),
  597. CreateTime = reader["create_time"].ToString(),
  598. PatchName = reader["patch_name"].ToString(),
  599. StandId = reader["stand_id"].ToString(),
  600. StandName = reader["stand_name"].ToString(),
  601. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  602. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  603. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"]),
  604. InvalidCount = reader["invalid_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["invalid_count"]),
  605. ErrorCount = reader["error_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["error_count"]),
  606. };
  607. }
  608. }
  609. return vPatch;
  610. }
  611. public static Tuple<int, int, List<VPatchStation>> GetPagedPatchStations(int pageNumber, int pageSize,string patchId)
  612. {
  613. // 计算偏移量
  614. int offset = (pageNumber - 1) * pageSize;
  615. string sql = @"
  616. SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  617. FROM v_patch_detail_station
  618. WHERE patch_id = @PatchId OR patch_id = ''
  619. ORDER BY station_id ASC -- 根据需要修改排序字段
  620. LIMIT @PageSize OFFSET @Offset;";
  621. // 定义参数
  622. SQLiteParameter[] parameters = new SQLiteParameter[]
  623. {
  624. new SQLiteParameter("@PatchId", patchId),
  625. new SQLiteParameter("@PageSize", pageSize),
  626. new SQLiteParameter("@Offset", offset)
  627. };
  628. // 执行查询并读取数据
  629. List<VPatchStation> vpsDetails = new List<VPatchStation>();
  630. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters.ToArray()))
  631. {
  632. while (reader.Read())
  633. {
  634. VPatchStation patchDetail = new VPatchStation
  635. {
  636. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  637. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  638. TotalCount = reader.GetInt32(reader.GetOrdinal("total_count")),
  639. ErrorCount = reader.GetInt32(reader.GetOrdinal("error_count")),
  640. EqualCount = reader.GetInt32(reader.GetOrdinal("equal_count")),
  641. InvalidCount = reader.GetInt32(reader.GetOrdinal("invalid_count"))
  642. };
  643. vpsDetails.Add(patchDetail);
  644. }
  645. }
  646. // 获取总记录数,用于计算总页数
  647. string countSql = "SELECT COUNT(*) FROM v_patch_detail_station WHERE patch_id = @PatchId OR patch_id = ''";
  648. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters.ToArray()));
  649. // 计算总页数
  650. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  651. // 返回总记录数、总页数和分页结果
  652. return Tuple.Create(totalRecords, totalPages, vpsDetails);
  653. }
  654. public static VPatchStation GetPatchStation(string patchId,string stationId)
  655. {
  656. VPatchStation vps = null;
  657. // 查询 SQL,从 v_patch 视图中获取数据
  658. string query = @"
  659. SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  660. FROM v_patch_detail_station
  661. WHERE patch_id = @PatchId AND station_id=@StationId;";
  662. // 构造参数
  663. SQLiteParameter[] parameters = new SQLiteParameter[]
  664. {
  665. new SQLiteParameter("@PatchId", patchId),
  666. new SQLiteParameter("@StationId", stationId),
  667. };
  668. // 执行查询
  669. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  670. {
  671. if (reader.Read())
  672. {
  673. vps = new VPatchStation
  674. {
  675. PatchId = reader["patch_id"].ToString(),
  676. StationId = reader["station_id"].ToString(),
  677. TotalCount = reader["total_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["total_count"]),
  678. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"]),
  679. ErrorCount = reader["error_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["error_count"]),
  680. InvalidCount = reader["invalid_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["invalid_count"])
  681. };
  682. }
  683. }
  684. return vps;
  685. }
  686. //获取所有的识别任务
  687. public static List<VPatch> GetAllVPatchs()
  688. {
  689. // 定义 SQL 查询语句,带有分页
  690. string sql = @"
  691. SELECT
  692. patch_id,
  693. create_time,
  694. patch_name,
  695. stand_id,
  696. stand_name,
  697. detail_count,
  698. run_count,
  699. equal_count
  700. FROM v_patch WHERE detail_count = run_count
  701. ORDER BY create_time DESC";
  702. // 执行查询并获取结果
  703. List<VPatch> patchs = new List<VPatch>();
  704. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  705. {
  706. while (reader.Read())
  707. {
  708. // 将查询结果映射到 TStand 对象
  709. VPatch patch = new VPatch
  710. {
  711. PatchId = reader["patch_id"].ToString(),
  712. CreateTime = reader["create_time"].ToString(),
  713. PatchName = reader["patch_name"].ToString(),
  714. StandId = reader["stand_id"].ToString(),
  715. StandName = reader["stand_name"].ToString(),
  716. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  717. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  718. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"])
  719. };
  720. patchs.Add(patch);
  721. }
  722. }
  723. return patchs;
  724. }
  725. public static List<TPatchDetail> GetPatchDetailsWithRunFlagZero(string patchId)
  726. {
  727. // 查询 SQL
  728. //string sql = @"
  729. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  730. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  731. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  732. // FROM t_patch_detail
  733. // WHERE patch_id = @PatchId AND run_flag = 0
  734. // ORDER BY create_time AESC;"; // 可以根据需要修改排序字段
  735. //string sql = @"
  736. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image
  737. // FROM t_patch_detail
  738. // WHERE patch_id = @PatchId AND run_flag = 0
  739. // ORDER BY create_time ASC;"; // 可以根据需要修改排序字段
  740. string sql = $@"
  741. SELECT * FROM t_patch_detail
  742. WHERE patch_id = @PatchId AND run_flag = 0
  743. ORDER BY station_id,sample_time ASC";
  744. // 定义参数
  745. SQLiteParameter[] parameters = new SQLiteParameter[]
  746. {
  747. new SQLiteParameter("@PatchId", patchId)
  748. };
  749. // 执行查询并读取数据
  750. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  751. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  752. {
  753. while (reader.Read())
  754. {
  755. // 将查询结果映射到 TPatchDetail 对象
  756. TPatchDetail patchDetail = new TPatchDetail
  757. {
  758. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  759. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  760. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  761. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  762. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  763. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  764. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  765. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  766. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  767. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  768. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  769. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  770. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  771. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  772. ValueChanged = reader.GetInt32(reader.GetOrdinal("value_changed")),
  773. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  774. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  775. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  776. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  777. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  778. Memo = reader.GetString(reader.GetOrdinal("memo")),
  779. StationKey = reader.GetString(reader.GetOrdinal("station_key")),
  780. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  781. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  782. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  783. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  784. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  785. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  786. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  787. MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  788. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  789. LastCompress = reader.GetInt32(reader.GetOrdinal("last_compress")),
  790. LatestValue = reader.GetInt64(reader.GetOrdinal("latest_value")),
  791. LatestTime = reader.GetString(reader.GetOrdinal("latest_time")),
  792. LatestComplete = reader.GetInt64(reader.GetOrdinal("latest_complete"))
  793. };
  794. patchDetails.Add(patchDetail);
  795. }
  796. }
  797. return patchDetails;
  798. }
  799. public static int GetPatchDetailsCountWithRunFlagZero(string patchId)
  800. {
  801. // 查询数据数量的 SQL
  802. string sql = "SELECT COUNT(*) FROM t_patch_detail WHERE patch_id = @PatchId AND run_flag = 0";
  803. // 定义参数
  804. SQLiteParameter[] parameters = new SQLiteParameter[]
  805. {
  806. new SQLiteParameter("@PatchId", patchId)
  807. };
  808. // 执行查询并返回数据数量
  809. return Convert.ToInt32(SQLiteHelper.GetSingle(sql, parameters));
  810. }
  811. /// <summary>
  812. /// 根据 patch_detail_id 删除指定的记录
  813. /// </summary>
  814. /// <param name="patchDetailId">要删除的记录的 ID</param>
  815. /// <returns>删除成功返回 true,否则返回 false</returns>
  816. public static bool DeleteTPatchDetailById(string patchDetailId)
  817. {
  818. // 构建删除的 SQL 语句
  819. string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  820. // 创建参数数组
  821. SQLiteParameter[] parameters = new SQLiteParameter[]
  822. {
  823. new SQLiteParameter("@PatchDetailId", patchDetailId)
  824. };
  825. try
  826. {
  827. // 调用 SQLiteHelper 执行删除操作
  828. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  829. // 如果删除成功,返回 true,否则返回 false
  830. return rowsAffected > 0;
  831. }
  832. catch (Exception ex)
  833. {
  834. // 处理异常(如果有的话)
  835. Console.WriteLine("Error deleting data: " + ex.Message);
  836. return false;
  837. }
  838. }
  839. /// <summary>
  840. /// 根据 standDetailId 删除t_patch_detail与t_stand_detail中相关的数据
  841. /// </summary>
  842. /// <param name="standDetailId">要删除的记录的 模板详情ID</param>
  843. /// <returns>删除成功返回 true,否则返回 false</returns>
  844. public static bool Delete_TPatchDetail_TStandDetail_ByStand(string standDetailId)
  845. {
  846. // 构建删除的 SQL 语句
  847. //string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  848. // 定义删除的 SQL 语句,使用事务来保证一致性
  849. string sql = @"
  850. BEGIN TRANSACTION;
  851. -- 删除 t_patch_detail 表中与 stand_id 相关的数据
  852. DELETE FROM t_patch_detail WHERE stand_detail_id = @StandDetailId;
  853. -- 删除 t_patch 表中与 patch_id 相关的数据
  854. DELETE FROM t_stand_detail WHERE stand_detail_id = @StandDetailId;
  855. COMMIT;";
  856. // 创建参数数组
  857. SQLiteParameter[] parameters = new SQLiteParameter[]
  858. {
  859. new SQLiteParameter("@StandDetailId", standDetailId)
  860. };
  861. try
  862. {
  863. // 调用 SQLiteHelper 执行删除操作
  864. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  865. // 如果删除成功,返回 true,否则返回 false
  866. return rowsAffected > 0;
  867. }
  868. catch (Exception ex)
  869. {
  870. // 处理异常(如果有的话)
  871. Console.WriteLine("Error deleting data: " + ex.Message);
  872. return false;
  873. }
  874. }
  875. public static bool UpdatePatchName(string patchId, string patchName)
  876. {
  877. string sql = @"
  878. UPDATE t_patch
  879. SET patch_name = @PatchName
  880. WHERE patch_id = @PatchId;";
  881. // 创建 SQL 参数
  882. SQLiteParameter[] parameters = new SQLiteParameter[]
  883. {
  884. new SQLiteParameter("@PatchName", patchName),
  885. new SQLiteParameter("@PatchId", patchId)
  886. };
  887. // 执行更新操作并返回受影响的行数
  888. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  889. }
  890. public static bool UpdatePatchDetailMemo(string detailId,string memo)
  891. {
  892. // 定义 SQL 更新语句
  893. string sql = @"
  894. UPDATE t_patch_detail
  895. SET memo = @Memo
  896. WHERE patch_detail_id = @PatchDetailId;";
  897. // 创建 SQL 参数
  898. SQLiteParameter[] parameters = new SQLiteParameter[]
  899. {
  900. new SQLiteParameter("@PatchDetailId", detailId),
  901. new SQLiteParameter("@Memo", memo)
  902. };
  903. // 执行更新操作并返回受影响的行数
  904. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  905. }
  906. //升级数据库(t_patch_detail添加memo字段)
  907. public static void UpdateTPatchDetailSchema()
  908. {
  909. string sql = "PRAGMA table_info(t_patch_detail)";
  910. // 查询表结构,判断是否存在memo字段
  911. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  912. {
  913. bool memoExists = false;
  914. while (reader.Read())
  915. {
  916. if(reader["name"].ToString().ToLower() == "memo")
  917. {
  918. memoExists = true;
  919. break;
  920. }
  921. }
  922. reader.Close();
  923. //如果不存在memo字段,则添加该字段
  924. if (!memoExists)
  925. {
  926. sql = "ALTER TABLE t_patch_detail ADD COLUMN memo TEXT NOT NULL DEFAULT ''";
  927. SQLiteHelper.ExecuteNonQuery(sql, null);
  928. }
  929. }//using
  930. }
  931. //////////////////////////////////////////////////////////
  932. }
  933. }