DBSingle.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.SQLite;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace MeterVision.db
  8. {
  9. public class DBSingle
  10. {
  11. public static bool InsertTSingleDetail0(TSingleDetail singlDetail)
  12. {
  13. // 构建插入的 SQL 语句
  14. string sql = "INSERT INTO t_single_detail (single_detail_id, create_time, src_image) " +
  15. "VALUES (@SingleDetailId, @CreateTime, @SrcImage)";
  16. // 创建参数数组
  17. SQLiteParameter[] parameters = new SQLiteParameter[]
  18. {
  19. new SQLiteParameter("@SingleDetailId", singlDetail.SingleDetailId),
  20. new SQLiteParameter("@CreateTime", singlDetail.CreateTime),
  21. new SQLiteParameter("@SrcImage", singlDetail.SrcImage)
  22. };
  23. try
  24. {
  25. // 调用 SQLiteHelper 执行插入操作
  26. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  27. // 如果插入成功,返回 true,否则返回 false
  28. return rowsAffected > 0;
  29. }
  30. catch (Exception ex)
  31. {
  32. // 处理异常(如果有的话)
  33. Console.WriteLine("Error inserting data: " + ex.Message);
  34. return false;
  35. }
  36. }
  37. public static bool InsertSingleDetail(TSingleDetail detail)
  38. {
  39. // 定义 SQL 插入语句
  40. string sql = @"
  41. INSERT INTO t_single_detail (
  42. single_detail_id, create_time, src_image, run_flag, run_time,
  43. dst_image, meter_type, digit_count, pointer_count, last_unit,
  44. result_type, raw_value, final_value, ai_ver, debug_info, log_path
  45. )
  46. VALUES (
  47. @SingleDetailId, @CreateTime, @SrcImage, @RunFlag, @RunTime,
  48. @DstImage, @MeterType, @DigitCount, @PointerCount, @LastUnit,
  49. @ResultType, @RawValue, @FinalValue, @AiVer, @DebugInfo, @LogPath
  50. );
  51. ";
  52. // 创建 SQL 参数
  53. SQLiteParameter[] parameters = new SQLiteParameter[]
  54. {
  55. new SQLiteParameter("@SingleDetailId", detail.SingleDetailId),
  56. new SQLiteParameter("@CreateTime", detail.CreateTime),
  57. new SQLiteParameter("@SrcImage", detail.SrcImage),
  58. new SQLiteParameter("@RunFlag", detail.RunFlag),
  59. new SQLiteParameter("@RunTime", detail.RunTime),
  60. new SQLiteParameter("@DstImage", detail.DstImage),
  61. new SQLiteParameter("@MeterType", detail.MeterType),
  62. new SQLiteParameter("@DigitCount", detail.DigitCount),
  63. new SQLiteParameter("@PointerCount", detail.PointerCount),
  64. new SQLiteParameter("@LastUnit", detail.LastUnit),
  65. new SQLiteParameter("@ResultType", detail.ResultType),
  66. new SQLiteParameter("@RawValue", detail.RawValue),
  67. new SQLiteParameter("@FinalValue", detail.FinalValue),
  68. new SQLiteParameter("@AiVer", detail.AiVer),
  69. new SQLiteParameter("@DebugInfo", detail.DebugInfo),
  70. new SQLiteParameter("@LogPath", detail.LogPath)
  71. };
  72. // 执行插入操作并返回受影响的行数
  73. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  74. }
  75. public static bool UpdateSingleDetail(TSingleDetail detail)
  76. {
  77. // 定义 SQL 更新语句
  78. string sql = @"
  79. UPDATE t_single_detail
  80. SET run_flag = @RunFlag,
  81. run_time = @RunTime,
  82. dst_image = @DstImage,
  83. meter_type = @MeterType,
  84. digit_count = @DigitCount,
  85. pointer_count = @PointerCount,
  86. last_unit = @LastUnit,
  87. result_type = @ResultType,
  88. raw_value = @RawValue,
  89. final_value = @FinalValue,
  90. ai_ver = @AiVer,
  91. debug_info = @DebugInfo,
  92. log_path = @LogPath
  93. WHERE single_detail_id = @SingleDetailId;";
  94. // 创建 SQL 参数
  95. SQLiteParameter[] parameters = new SQLiteParameter[]
  96. {
  97. new SQLiteParameter("@SingleDetailId", detail.SingleDetailId),
  98. //new SQLiteParameter("@CreateTime", detail.CreateTime),
  99. //new SQLiteParameter("@SrcImage", detail.SrcImage),
  100. new SQLiteParameter("@RunFlag", detail.RunFlag),
  101. new SQLiteParameter("@RunTime", detail.RunTime),
  102. new SQLiteParameter("@DstImage", detail.DstImage),
  103. new SQLiteParameter("@MeterType", detail.MeterType),
  104. new SQLiteParameter("@DigitCount", detail.DigitCount),
  105. new SQLiteParameter("@PointerCount", detail.PointerCount),
  106. new SQLiteParameter("@LastUnit", detail.LastUnit),
  107. new SQLiteParameter("@ResultType", detail.ResultType),
  108. new SQLiteParameter("@RawValue", detail.RawValue),
  109. new SQLiteParameter("@FinalValue", detail.FinalValue),
  110. new SQLiteParameter("@AiVer", detail.AiVer),
  111. new SQLiteParameter("@DebugInfo", detail.DebugInfo),
  112. new SQLiteParameter("@LogPath", detail.LogPath)
  113. };
  114. // 执行更新操作并返回受影响的行数
  115. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  116. }
  117. //更改备注信息
  118. public static bool UpdateSingleDetailMemo(string detailId,string memo)
  119. {
  120. // 定义 SQL 更新语句
  121. string sql = @"
  122. UPDATE t_single_detail
  123. SET memo = @Memo
  124. WHERE single_detail_id = @SingleDetailId;";
  125. // 创建 SQL 参数
  126. SQLiteParameter[] parameters = new SQLiteParameter[]
  127. {
  128. new SQLiteParameter("@SingleDetailId", detailId),
  129. new SQLiteParameter("@Memo", memo)
  130. };
  131. // 执行更新操作并返回受影响的行数
  132. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  133. }
  134. public static Tuple<int,int, List<TSingleDetail>> GetPagedSingleDetails(int pageNumber, int pageSize)
  135. {
  136. // 计算 OFFSET 值
  137. int offset = (pageNumber - 1) * pageSize;
  138. // 定义 SQL 查询语句,带有分页
  139. string sql = @"
  140. SELECT single_detail_id, create_time, src_image, run_flag, run_time,
  141. dst_image, meter_type, digit_count, pointer_count, last_unit,
  142. result_type, raw_value, final_value, ai_ver, debug_info, log_path, memo
  143. FROM t_single_detail
  144. ORDER BY create_time DESC
  145. LIMIT @PageSize OFFSET @Offset;";
  146. // 创建 SQL 参数
  147. SQLiteParameter[] parameters = new SQLiteParameter[]
  148. {
  149. new SQLiteParameter("@PageSize", pageSize),
  150. new SQLiteParameter("@Offset", offset)
  151. };
  152. // 执行查询并获取结果
  153. List<TSingleDetail> details = new List<TSingleDetail>();
  154. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  155. {
  156. while (reader.Read())
  157. {
  158. // 将查询结果映射到 TSingleDetail 对象
  159. TSingleDetail detail = new TSingleDetail
  160. {
  161. SingleDetailId = reader.GetString(reader.GetOrdinal("single_detail_id")),
  162. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  163. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  164. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  165. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  166. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  167. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  168. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  169. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  170. LastUnit = reader.GetString(reader.GetOrdinal("last_unit")),
  171. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  172. RawValue = reader.GetString(reader.GetOrdinal("raw_value")),
  173. FinalValue = reader.GetString(reader.GetOrdinal("final_value")),
  174. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  175. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  176. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  177. Memo = reader.GetString(reader.GetOrdinal("memo"))
  178. };
  179. details.Add(detail);
  180. }
  181. }
  182. // 获取总记录数,用于计算总页数
  183. string countSql = "SELECT COUNT(*) FROM t_single_detail";
  184. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql));
  185. // 计算总页数
  186. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  187. // 返回元组,包含总页数和结果列表
  188. return Tuple.Create(totalRecords,totalPages, details);
  189. }
  190. /// <summary>
  191. /// 根据 single_detail_id 删除指定的记录
  192. /// </summary>
  193. /// <param name="singleDetailId">要删除的记录的 ID</param>
  194. /// <returns>删除成功返回 true,否则返回 false</returns>
  195. public static bool DeleteTSingleDetailById(string singleDetailId)
  196. {
  197. // 构建删除的 SQL 语句
  198. string sql = "DELETE FROM t_single_detail WHERE single_detail_id = @SingleDetailId";
  199. // 创建参数数组
  200. SQLiteParameter[] parameters = new SQLiteParameter[]
  201. {
  202. new SQLiteParameter("@SingleDetailId", singleDetailId)
  203. };
  204. try
  205. {
  206. // 调用 SQLiteHelper 执行删除操作
  207. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  208. // 如果删除成功,返回 true,否则返回 false
  209. return rowsAffected > 0;
  210. }
  211. catch (Exception ex)
  212. {
  213. // 处理异常(如果有的话)
  214. Console.WriteLine("Error deleting data: " + ex.Message);
  215. return false;
  216. }
  217. }
  218. /// <summary>
  219. /// 清空 t_single_detail 表中的所有记录
  220. /// </summary>
  221. /// <returns>操作成功返回 true,否则返回 false</returns>
  222. public static bool ClearTSingleDetailTable()
  223. {
  224. // 构建清空表的 SQL 语句
  225. string sql = "DELETE FROM t_single_detail";
  226. try
  227. {
  228. // 调用 SQLiteHelper 执行清空操作
  229. SQLiteHelper.ExecuteSql(sql, null);
  230. // 返回 true 表示操作成功
  231. return true;
  232. }
  233. catch (Exception ex)
  234. {
  235. // 处理异常(如果有的话)
  236. Console.WriteLine("Error clearing table: " + ex.Message);
  237. return false;
  238. }
  239. }
  240. //升级数据库(t_patch_detail添加memo字段)
  241. public static void UpdateTSingleDetailSchema()
  242. {
  243. string sql = "PRAGMA table_info(t_single_detail)";
  244. // 查询表结构,判断是否存在memo字段
  245. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  246. {
  247. bool memoExists = false;
  248. while (reader.Read())
  249. {
  250. if (reader["name"].ToString().ToLower() == "memo")
  251. {
  252. memoExists = true;
  253. break;
  254. }
  255. }
  256. reader.Close();
  257. //如果不存在memo字段,则添加该字段
  258. if (!memoExists)
  259. {
  260. sql = "ALTER TABLE t_single_detail ADD COLUMN memo TEXT NOT NULL DEFAULT ''";
  261. SQLiteHelper.ExecuteNonQuery(sql, null);
  262. }
  263. }//using
  264. }
  265. //-----------------------------------------------------------------------------------------
  266. }
  267. }