DBPatch.cs 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106
  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 (!string.IsNullOrEmpty(findModel.StationId))
  489. {
  490. whereClause.Append(" AND station_id = @StationId");
  491. parameters.Add(new SQLiteParameter("StationId", findModel.StationId));
  492. }
  493. if(findModel.PatchFindType == Patch.PatchFindType.HAVE_MEMO)
  494. {
  495. whereClause.Append(" AND memo != ''");
  496. //parameters.Add(new SQLiteParameter("@EqualFlag", findModel.EqualFlag));
  497. }
  498. //if (findModel.EqualFlag == 2) // 针对无标准值的查询条件
  499. //{
  500. // whereClause.Append(" AND stand_value = ''");
  501. //}
  502. // 分页查询SQL
  503. //string sql = $@"
  504. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  505. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  506. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path, memo
  507. // FROM t_patch_detail
  508. // {whereClause}
  509. // ORDER BY create_time ASC -- 根据需要修改排序字段
  510. // LIMIT @PageSize OFFSET @Offset;";
  511. string sql = $@"
  512. SELECT * FROM t_patch_detail
  513. {whereClause}
  514. ORDER BY station_id,sample_time ASC
  515. LIMIT @PageSize OFFSET @Offset;";
  516. // 执行查询并读取数据
  517. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  518. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters.ToArray()))
  519. {
  520. while (reader.Read())
  521. {
  522. TPatchDetail patchDetail = new TPatchDetail
  523. {
  524. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  525. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  526. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  527. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  528. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  529. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  530. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  531. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  532. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  533. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  534. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  535. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  536. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  537. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  538. ValueChanged = reader.GetInt32(reader.GetOrdinal("value_changed")),
  539. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  540. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  541. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  542. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  543. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  544. Memo = reader.GetString(reader.GetOrdinal("memo")),
  545. StationKey = reader.GetString(reader.GetOrdinal("station_key")),
  546. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  547. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  548. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  549. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  550. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  551. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  552. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  553. MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  554. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  555. LastCompress = reader.GetInt32(reader.GetOrdinal("last_compress")),
  556. LatestValue = reader.GetInt64(reader.GetOrdinal("latest_value")),
  557. LatestTime = reader.GetString(reader.GetOrdinal("latest_time")),
  558. LatestComplete = reader.GetInt64(reader.GetOrdinal("latest_complete"))
  559. };
  560. patchDetails.Add(patchDetail);
  561. }
  562. }
  563. // 获取总记录数,用于计算总页数
  564. string countSql = "SELECT COUNT(*) FROM t_patch_detail " + whereClause;
  565. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters.ToArray()));
  566. // 计算总页数
  567. int totalPages = (int)Math.Ceiling((double)totalRecords / findModel.PageSize);
  568. // 返回总记录数、总页数和分页结果
  569. return Tuple.Create(totalRecords, totalPages, patchDetails);
  570. }
  571. public static VPatch GetVPatchById(string patchId)
  572. {
  573. VPatch vPatch = null;
  574. // 查询 SQL,从 v_patch 视图中获取数据
  575. string query = @"
  576. SELECT
  577. patch_id,
  578. create_time,
  579. patch_name,
  580. stand_id,
  581. stand_name,
  582. detail_count,
  583. run_count,
  584. equal_count,
  585. invalid_count,
  586. error_count
  587. FROM v_patch
  588. WHERE patch_id = @PatchId;";
  589. // 构造参数
  590. SQLiteParameter[] parameters = new SQLiteParameter[]
  591. {
  592. new SQLiteParameter("@PatchId", patchId)
  593. };
  594. // 执行查询
  595. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  596. {
  597. if (reader.Read())
  598. {
  599. vPatch = new VPatch
  600. {
  601. PatchId = reader["patch_id"].ToString(),
  602. CreateTime = reader["create_time"].ToString(),
  603. PatchName = reader["patch_name"].ToString(),
  604. StandId = reader["stand_id"].ToString(),
  605. StandName = reader["stand_name"].ToString(),
  606. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  607. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  608. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"]),
  609. InvalidCount = reader["invalid_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["invalid_count"]),
  610. ErrorCount = reader["error_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["error_count"]),
  611. };
  612. }
  613. }
  614. return vPatch;
  615. }
  616. public static Tuple<int, int, List<VPatchStation>> GetPagedPatchStations(int pageNumber, int pageSize, string findStationId,string patchId)
  617. {
  618. // 计算偏移量
  619. int offset = (pageNumber - 1) * pageSize;
  620. //动态构造 WHERE 子句
  621. StringBuilder whereClause = new StringBuilder("WHERE (patch_id = @PatchId");
  622. if (!string.IsNullOrEmpty(findStationId))
  623. {
  624. whereClause.Append(" AND station_id like @FindStationId");
  625. }
  626. whereClause.Append(") OR patch_id = ''");
  627. //string sql = @"
  628. // SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  629. // FROM v_patch_detail_station
  630. // WHERE patch_id = @PatchId OR patch_id = ''
  631. // ORDER BY station_id ASC -- 根据需要修改排序字段
  632. // LIMIT @PageSize OFFSET @Offset;";
  633. string sql = $@"
  634. SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  635. FROM v_patch_detail_station
  636. {whereClause}
  637. ORDER BY station_id ASC -- 根据需要修改排序字段
  638. LIMIT @PageSize OFFSET @Offset;";
  639. // 定义参数
  640. //SQLiteParameter[] parameters = new SQLiteParameter[]
  641. List<SQLiteParameter> parameters = new List<SQLiteParameter>
  642. {
  643. new SQLiteParameter("@PatchId", patchId),
  644. new SQLiteParameter("@PageSize", pageSize),
  645. new SQLiteParameter("@Offset", offset)
  646. };
  647. if (!string.IsNullOrEmpty(findStationId))
  648. {
  649. parameters.Add(new SQLiteParameter("FindStationId", "%" + findStationId + "%"));
  650. }
  651. // 执行查询并读取数据
  652. List<VPatchStation> vpsDetails = new List<VPatchStation>();
  653. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters.ToArray()))
  654. {
  655. while (reader.Read())
  656. {
  657. VPatchStation patchDetail = new VPatchStation
  658. {
  659. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  660. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  661. TotalCount = reader.GetInt32(reader.GetOrdinal("total_count")),
  662. ErrorCount = reader.GetInt32(reader.GetOrdinal("error_count")),
  663. EqualCount = reader.GetInt32(reader.GetOrdinal("equal_count")),
  664. InvalidCount = reader.GetInt32(reader.GetOrdinal("invalid_count"))
  665. };
  666. vpsDetails.Add(patchDetail);
  667. }
  668. }
  669. // 获取总记录数,用于计算总页数
  670. string countSql = "SELECT COUNT(*) FROM v_patch_detail_station " + whereClause;
  671. //WHERE patch_id = @PatchId OR patch_id = ''";
  672. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters.ToArray()));
  673. // 计算总页数
  674. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  675. // 返回总记录数、总页数和分页结果
  676. return Tuple.Create(totalRecords, totalPages, vpsDetails);
  677. }
  678. public static VPatchStation GetPatchStation(string patchId,string stationId)
  679. {
  680. VPatchStation vps = null;
  681. // 查询 SQL,从 v_patch 视图中获取数据
  682. string query = @"
  683. SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  684. FROM v_patch_detail_station
  685. WHERE patch_id = @PatchId AND station_id=@StationId;";
  686. // 构造参数
  687. SQLiteParameter[] parameters = new SQLiteParameter[]
  688. {
  689. new SQLiteParameter("@PatchId", patchId),
  690. new SQLiteParameter("@StationId", stationId),
  691. };
  692. // 执行查询
  693. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  694. {
  695. if (reader.Read())
  696. {
  697. vps = new VPatchStation
  698. {
  699. PatchId = reader["patch_id"].ToString(),
  700. StationId = reader["station_id"].ToString(),
  701. TotalCount = reader["total_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["total_count"]),
  702. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"]),
  703. ErrorCount = reader["error_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["error_count"]),
  704. InvalidCount = reader["invalid_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["invalid_count"])
  705. };
  706. }
  707. }
  708. return vps;
  709. }
  710. //获取所有的识别任务
  711. public static List<VPatch> GetAllVPatchs()
  712. {
  713. // 定义 SQL 查询语句,带有分页
  714. string sql = @"
  715. SELECT
  716. patch_id,
  717. create_time,
  718. patch_name,
  719. stand_id,
  720. stand_name,
  721. detail_count,
  722. run_count,
  723. equal_count
  724. FROM v_patch WHERE detail_count = run_count
  725. ORDER BY create_time DESC";
  726. // 执行查询并获取结果
  727. List<VPatch> patchs = new List<VPatch>();
  728. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  729. {
  730. while (reader.Read())
  731. {
  732. // 将查询结果映射到 TStand 对象
  733. VPatch patch = new VPatch
  734. {
  735. PatchId = reader["patch_id"].ToString(),
  736. CreateTime = reader["create_time"].ToString(),
  737. PatchName = reader["patch_name"].ToString(),
  738. StandId = reader["stand_id"].ToString(),
  739. StandName = reader["stand_name"].ToString(),
  740. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  741. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  742. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"])
  743. };
  744. patchs.Add(patch);
  745. }
  746. }
  747. return patchs;
  748. }
  749. public static List<TPatchDetail> GetPatchDetailsWithRunFlagZero(string patchId,string stationId)
  750. {
  751. // 查询 SQL
  752. //string sql = @"
  753. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  754. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  755. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  756. // FROM t_patch_detail
  757. // WHERE patch_id = @PatchId AND run_flag = 0
  758. // ORDER BY create_time AESC;"; // 可以根据需要修改排序字段
  759. //string sql = @"
  760. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image
  761. // FROM t_patch_detail
  762. // WHERE patch_id = @PatchId AND run_flag = 0
  763. // ORDER BY create_time ASC;"; // 可以根据需要修改排序字段
  764. string whereStation = "";
  765. if (!string.IsNullOrEmpty(stationId))
  766. {
  767. whereStation = " AND station_id = @StationId";
  768. }
  769. string sql = $@"
  770. SELECT * FROM t_patch_detail
  771. WHERE patch_id = @PatchId AND run_flag = 0{whereStation}
  772. ORDER BY station_id,sample_time ASC";
  773. // 定义参数
  774. SQLiteParameter[] parameters = new SQLiteParameter[]
  775. {
  776. new SQLiteParameter("@PatchId", patchId),
  777. new SQLiteParameter("@StationId",stationId)
  778. };
  779. // 执行查询并读取数据
  780. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  781. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  782. {
  783. while (reader.Read())
  784. {
  785. // 将查询结果映射到 TPatchDetail 对象
  786. TPatchDetail patchDetail = new TPatchDetail
  787. {
  788. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  789. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  790. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  791. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  792. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  793. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  794. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  795. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  796. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  797. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  798. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  799. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  800. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  801. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  802. ValueChanged = reader.GetInt32(reader.GetOrdinal("value_changed")),
  803. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  804. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  805. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  806. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  807. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  808. Memo = reader.GetString(reader.GetOrdinal("memo")),
  809. StationKey = reader.GetString(reader.GetOrdinal("station_key")),
  810. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  811. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  812. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  813. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  814. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  815. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  816. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  817. MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  818. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  819. LastCompress = reader.GetInt32(reader.GetOrdinal("last_compress")),
  820. LatestValue = reader.GetInt64(reader.GetOrdinal("latest_value")),
  821. LatestTime = reader.GetString(reader.GetOrdinal("latest_time")),
  822. LatestComplete = reader.GetInt64(reader.GetOrdinal("latest_complete"))
  823. };
  824. patchDetails.Add(patchDetail);
  825. }
  826. }
  827. return patchDetails;
  828. }
  829. public static int GetPatchDetailsCountWithRunFlagZero(string patchId,string stationId)
  830. {
  831. string whereStation = "";
  832. if(!string.IsNullOrEmpty(stationId))
  833. {
  834. whereStation = " AND station_id = @StationId";
  835. }
  836. // 查询数据数量的 SQL
  837. string sql = $@"SELECT COUNT(*) FROM t_patch_detail WHERE patch_id = @PatchId AND run_flag = 0{whereStation}";
  838. // 定义参数
  839. SQLiteParameter[] parameters = new SQLiteParameter[]
  840. {
  841. new SQLiteParameter("@PatchId", patchId),
  842. new SQLiteParameter("@StationId",stationId)
  843. };
  844. // 执行查询并返回数据数量
  845. return Convert.ToInt32(SQLiteHelper.GetSingle(sql, parameters));
  846. }
  847. /// <summary>
  848. /// 根据 patch_detail_id 删除指定的记录
  849. /// </summary>
  850. /// <param name="patchDetailId">要删除的记录的 ID</param>
  851. /// <returns>删除成功返回 true,否则返回 false</returns>
  852. public static bool DeleteTPatchDetailById(string patchDetailId)
  853. {
  854. // 构建删除的 SQL 语句
  855. string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  856. // 创建参数数组
  857. SQLiteParameter[] parameters = new SQLiteParameter[]
  858. {
  859. new SQLiteParameter("@PatchDetailId", patchDetailId)
  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. /// <summary>
  876. /// 根据 standDetailId 删除t_patch_detail与t_stand_detail中相关的数据
  877. /// </summary>
  878. /// <param name="standDetailId">要删除的记录的 模板详情ID</param>
  879. /// <returns>删除成功返回 true,否则返回 false</returns>
  880. public static bool Delete_TPatchDetail_TStandDetail_ByStand(string standDetailId)
  881. {
  882. // 构建删除的 SQL 语句
  883. //string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  884. // 定义删除的 SQL 语句,使用事务来保证一致性
  885. string sql = @"
  886. BEGIN TRANSACTION;
  887. -- 删除 t_patch_detail 表中与 stand_id 相关的数据
  888. DELETE FROM t_patch_detail WHERE stand_detail_id = @StandDetailId;
  889. -- 删除 t_patch 表中与 patch_id 相关的数据
  890. DELETE FROM t_stand_detail WHERE stand_detail_id = @StandDetailId;
  891. COMMIT;";
  892. // 创建参数数组
  893. SQLiteParameter[] parameters = new SQLiteParameter[]
  894. {
  895. new SQLiteParameter("@StandDetailId", standDetailId)
  896. };
  897. try
  898. {
  899. // 调用 SQLiteHelper 执行删除操作
  900. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  901. // 如果删除成功,返回 true,否则返回 false
  902. return rowsAffected > 0;
  903. }
  904. catch (Exception ex)
  905. {
  906. // 处理异常(如果有的话)
  907. Console.WriteLine("Error deleting data: " + ex.Message);
  908. return false;
  909. }
  910. }
  911. public static bool UpdatePatchName(string patchId, string patchName)
  912. {
  913. string sql = @"
  914. UPDATE t_patch
  915. SET patch_name = @PatchName
  916. WHERE patch_id = @PatchId;";
  917. // 创建 SQL 参数
  918. SQLiteParameter[] parameters = new SQLiteParameter[]
  919. {
  920. new SQLiteParameter("@PatchName", patchName),
  921. new SQLiteParameter("@PatchId", patchId)
  922. };
  923. // 执行更新操作并返回受影响的行数
  924. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  925. }
  926. public static bool UpdatePatchDetailMemo(string detailId,string memo)
  927. {
  928. // 定义 SQL 更新语句
  929. string sql = @"
  930. UPDATE t_patch_detail
  931. SET memo = @Memo
  932. WHERE patch_detail_id = @PatchDetailId;";
  933. // 创建 SQL 参数
  934. SQLiteParameter[] parameters = new SQLiteParameter[]
  935. {
  936. new SQLiteParameter("@PatchDetailId", detailId),
  937. new SQLiteParameter("@Memo", memo)
  938. };
  939. // 执行更新操作并返回受影响的行数
  940. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  941. }
  942. //升级数据库(t_patch_detail添加memo字段)
  943. public static void UpdateTPatchDetailSchema()
  944. {
  945. string sql = "PRAGMA table_info(t_patch_detail)";
  946. // 查询表结构,判断是否存在memo字段
  947. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  948. {
  949. bool memoExists = false;
  950. while (reader.Read())
  951. {
  952. if(reader["name"].ToString().ToLower() == "memo")
  953. {
  954. memoExists = true;
  955. break;
  956. }
  957. }
  958. reader.Close();
  959. //如果不存在memo字段,则添加该字段
  960. if (!memoExists)
  961. {
  962. sql = "ALTER TABLE t_patch_detail ADD COLUMN memo TEXT NOT NULL DEFAULT ''";
  963. SQLiteHelper.ExecuteNonQuery(sql, null);
  964. }
  965. }//using
  966. }
  967. //////////////////////////////////////////////////////////
  968. }
  969. }