DBSlave.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. using MV485.helper;
  2. using MV485.model;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data.SQLite;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace MV485.db
  10. {
  11. public class DBSlave
  12. {
  13. public static bool FreeDatabase()
  14. {
  15. // 构建删除的 SQL 语句
  16. string sql = "VACUUM;";
  17. try
  18. {
  19. // 调用 SQLiteHelper 执行删除操作
  20. int rowsAffected = SQLiteHelper.ExecuteSql(sql);
  21. // 如果删除成功,返回 true,否则返回 false
  22. //return rowsAffected > 0;
  23. return true;
  24. }
  25. catch (Exception ex)
  26. {
  27. // 处理异常(如果有的话)
  28. Console.WriteLine("Error deleting data: " + ex.Message);
  29. return false;
  30. }
  31. }
  32. public static bool InsertTSlave(TSlave tSlave)
  33. {
  34. // 构建插入的 SQL 语句
  35. string sql = "INSERT OR IGNORE INTO t_slave (slave_id, port_name, baud_rate, address, read_interval, read_image_flag,run_flag,last_read_time) " +
  36. "VALUES (@SlaveId, @PortName, @BaudRate, @Address,@ReadInterval,@ReadImageFlag,@RunFlag,@LastReadTime)";
  37. // 创建参数数组
  38. SQLiteParameter[] parameters = new SQLiteParameter[]
  39. {
  40. new SQLiteParameter("@SlaveId", tSlave.SlaveId),
  41. new SQLiteParameter("@PortName", tSlave.PortName),
  42. new SQLiteParameter("@BaudRate", tSlave.BaudRate),
  43. new SQLiteParameter("@Address", tSlave.Address),
  44. new SQLiteParameter("@ReadInterval", tSlave.ReadInterval),
  45. new SQLiteParameter("@ReadImageFlag", tSlave.ReadImageFlag),
  46. new SQLiteParameter("@RunFlag", tSlave.RunFlag),
  47. new SQLiteParameter("@LastReadTime", tSlave.LastReadTime)
  48. };
  49. try
  50. {
  51. // 调用 SQLiteHelper 执行插入操作
  52. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  53. // 如果插入成功,返回 true,否则返回 false
  54. return rowsAffected > 0;
  55. }
  56. catch (Exception ex)
  57. {
  58. // 处理异常(如果有的话)
  59. Console.WriteLine("Error inserting data: " + ex.Message);
  60. return false;
  61. }
  62. }
  63. public static List<TSlave> GetAllTSlaves()
  64. {
  65. // 定义 SQL 查询语句,按 slave_id 排序
  66. string sql = @"
  67. SELECT slave_id, port_name, baud_rate, address, read_interval, read_image_flag, run_flag, last_read_time,detail_count
  68. FROM v_slave ORDER BY port_name,address ASC";
  69. // 执行查询并获取结果
  70. List<TSlave> slaves = new List<TSlave>();
  71. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  72. {
  73. while (reader.Read())
  74. {
  75. // 将查询结果映射到 TSlave 对象
  76. TSlave slave = new TSlave
  77. {
  78. SlaveId = reader.GetString(reader.GetOrdinal("slave_id")),
  79. PortName = reader.GetString(reader.GetOrdinal("port_name")),
  80. BaudRate = reader.GetInt32(reader.GetOrdinal("baud_rate")),
  81. Address = reader.GetInt32(reader.GetOrdinal("address")),
  82. ReadInterval = reader.GetInt32(reader.GetOrdinal("read_interval")),
  83. ReadImageFlag = reader.GetInt32(reader.GetOrdinal("read_image_flag")),
  84. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  85. LastReadTime = reader.GetString(reader.GetOrdinal("last_read_time")),
  86. DetailCount = Convert.ToInt32(reader["detail_count"])
  87. };
  88. slaves.Add(slave);
  89. }
  90. }
  91. return slaves;
  92. }
  93. public static TSlave GetVSlaveBySlaveId(string slaveId)
  94. {
  95. TSlave slave = null;
  96. string sql = @"
  97. SELECT slave_id, port_name, baud_rate, address, read_interval, read_image_flag, run_flag, last_read_time,detail_count
  98. FROM v_slave WHERE slave_id = @SlaveId";
  99. // 构造参数
  100. SQLiteParameter[] parameters = new SQLiteParameter[]
  101. {
  102. new SQLiteParameter("@SlaveId", slaveId)
  103. };
  104. // 执行查询
  105. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  106. {
  107. if (reader.Read())
  108. {
  109. slave = new TSlave
  110. {
  111. SlaveId = reader.GetString(reader.GetOrdinal("slave_id")),
  112. PortName = reader.GetString(reader.GetOrdinal("port_name")),
  113. BaudRate = reader.GetInt32(reader.GetOrdinal("baud_rate")),
  114. Address = reader.GetInt32(reader.GetOrdinal("address")),
  115. ReadInterval = reader.GetInt32(reader.GetOrdinal("read_interval")),
  116. ReadImageFlag = reader.GetInt32(reader.GetOrdinal("read_image_flag")),
  117. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  118. LastReadTime = reader.GetString(reader.GetOrdinal("last_read_time")),
  119. DetailCount = Convert.ToInt32(reader["detail_count"])
  120. };
  121. }
  122. }
  123. return slave;
  124. }
  125. public static bool UpdateTSlave(TSlave tSlave)
  126. {
  127. // 定义更新的 SQL 语句
  128. string sql = @"
  129. UPDATE t_slave
  130. SET
  131. port_name = @PortName,
  132. baud_rate = @BaudRate,
  133. address = @Address,
  134. read_interval = @ReadInterval,
  135. read_image_flag = @ReadImageFlag,
  136. run_flag = @RunFlag
  137. WHERE slave_id = @SlaveId";
  138. // 创建 SQL 参数
  139. SQLiteParameter[] parameters = new SQLiteParameter[]
  140. {
  141. new SQLiteParameter("@SlaveId", tSlave.SlaveId),
  142. new SQLiteParameter("@PortName", tSlave.PortName),
  143. new SQLiteParameter("@BaudRate", tSlave.BaudRate),
  144. new SQLiteParameter("@Address", tSlave.Address),
  145. new SQLiteParameter("@ReadInterval", tSlave.ReadInterval),
  146. new SQLiteParameter("@ReadImageFlag", tSlave.ReadImageFlag),
  147. new SQLiteParameter("@RunFlag", tSlave.RunFlag),
  148. //new SQLiteParameter("@LastReadTime", tSlave.LastReadTime)
  149. };
  150. try
  151. {
  152. // 调用 SQLiteHelper 执行更新操作
  153. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  154. // 如果更新成功,返回 true,否则返回 false
  155. return rowsAffected > 0;
  156. }
  157. catch (Exception ex)
  158. {
  159. // 处理异常(如果有的话)
  160. Console.WriteLine("Error updating data: " + ex.Message);
  161. return false;
  162. }
  163. }
  164. public static bool UpdateTSlaveLastReadTime(TSlave tSlave)
  165. {
  166. // 定义更新的 SQL 语句
  167. string sql = @"
  168. UPDATE t_slave
  169. SET
  170. last_read_time = @LastReadTime
  171. WHERE slave_id = @SlaveId";
  172. // 创建 SQL 参数
  173. SQLiteParameter[] parameters = new SQLiteParameter[]
  174. {
  175. new SQLiteParameter("@SlaveId", tSlave.SlaveId),
  176. new SQLiteParameter("@LastReadTime", tSlave.LastReadTime)
  177. };
  178. try
  179. {
  180. // 调用 SQLiteHelper 执行更新操作
  181. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  182. // 如果更新成功,返回 true,否则返回 false
  183. return rowsAffected > 0;
  184. }
  185. catch (Exception ex)
  186. {
  187. // 处理异常(如果有的话)
  188. Console.WriteLine("Error updating data: " + ex.Message);
  189. return false;
  190. }
  191. }
  192. public static bool DeleteSlaveAndDetails(string slaveId)
  193. {
  194. // 定义删除的 SQL 语句,使用事务来保证一致性
  195. string sql = @"
  196. BEGIN TRANSACTION;
  197. -- 删除 t_slave_detail 表中与 slave_id 相关的数据
  198. DELETE FROM t_slave_detail WHERE slave_id = @SlaveId;
  199. -- 删除 t_slave 表中与 slave_id 相关的数据
  200. DELETE FROM t_slave WHERE slave_id = @SlaveId;
  201. COMMIT;";
  202. // 创建参数
  203. SQLiteParameter[] parameters = new SQLiteParameter[]
  204. {
  205. new SQLiteParameter("@SlaveId", slaveId)
  206. };
  207. try
  208. {
  209. // 执行 SQL 删除操作
  210. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  211. // 返回是否成功删除
  212. return rowsAffected > 0;
  213. }
  214. catch (Exception ex)
  215. {
  216. // 处理异常(如果有的话)
  217. Console.WriteLine("Error deleting data: " + ex.Message);
  218. return false;
  219. }
  220. }
  221. //////////////////////////////////////////////////////////////////////////////////
  222. }
  223. }