CNAS取数仪器端升级
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

234 Zeilen
8.9KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data.SQLite;
  6. using System.Data;
  7. namespace CNAS_DBSync
  8. {
  9. public static class SQLiteHelper
  10. {
  11. private static log4net.ILog log = log4net.LogManager.GetLogger("SQLiteHelper");
  12. private static string connectionString = string.Empty;
  13. /// <summary>
  14. /// 根据数据源、密码、版本号设置连接字符串。
  15. /// </summary>
  16. /// <param name="datasource">数据源。</param>
  17. /// <param name="password">密码。</param>
  18. /// <param name="version">版本号(缺省为3)。</param>
  19. public static void SetConnectionString(string datasource, string password, int version = 3)
  20. {
  21. connectionString = string.Format("Data Source={0};Version={1};password={2}",
  22. datasource, version, password);
  23. }
  24. /// <summary>
  25. /// 创建一个数据库文件。如果存在同名数据库文件,则会覆盖。
  26. /// </summary>
  27. /// <param name="dbName">数据库文件名。为null或空串时不创建。</param>
  28. /// <param name="password">(可选)数据库密码,默认为空。</param>
  29. /// <exception cref="Exception"></exception>
  30. public static void CreateDB(string dbName)
  31. {
  32. if (!string.IsNullOrEmpty(dbName))
  33. {
  34. try { SQLiteConnection.CreateFile(dbName); }
  35. catch (Exception) { throw; }
  36. }
  37. }
  38. /// <summary>
  39. /// 对SQLite数据库执行增删改操作,返回受影响的行数。
  40. /// </summary>
  41. /// <param name="sql">要执行的增删改的SQL语句。</param>
  42. /// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准。</param>
  43. /// <returns></returns>
  44. /// <exception cref="Exception"></exception>
  45. public static int ExecuteNonQuery(string sql, params SQLiteParameter[] parameters)
  46. {
  47. int affectedRows = 0;
  48. using (SQLiteConnection connection = new SQLiteConnection(connectionString))
  49. {
  50. using (SQLiteCommand command = new SQLiteCommand(connection))
  51. {
  52. try
  53. {
  54. connection.Open();
  55. command.CommandText = sql;
  56. if (parameters.Length != 0)
  57. {
  58. command.Parameters.AddRange(parameters);
  59. }
  60. affectedRows = command.ExecuteNonQuery();
  61. }
  62. catch (Exception) { throw; }
  63. }
  64. }
  65. return affectedRows;
  66. }
  67. /// <summary>
  68. /// 批量处理数据操作语句。
  69. /// </summary>
  70. /// <param name="list">SQL语句集合。</param>
  71. /// <exception cref="Exception"></exception>
  72. public static void ExecuteNonQueryBatch(List<KeyValuePair<string, SQLiteParameter[]>> list)
  73. {
  74. using (SQLiteConnection conn = new SQLiteConnection(connectionString))
  75. {
  76. try { conn.Open(); }
  77. catch { throw; }
  78. using (SQLiteTransaction tran = conn.BeginTransaction())
  79. {
  80. using (SQLiteCommand cmd = new SQLiteCommand(conn))
  81. {
  82. try
  83. {
  84. foreach (var item in list)
  85. {
  86. cmd.CommandText = item.Key;
  87. if (item.Value != null)
  88. {
  89. cmd.Parameters.AddRange(item.Value);
  90. }
  91. cmd.ExecuteNonQuery();
  92. }
  93. tran.Commit();
  94. }
  95. catch (Exception) { tran.Rollback(); throw; }
  96. }
  97. }
  98. }
  99. }
  100. /// <summary>
  101. /// 执行查询语句,并返回第一个结果。
  102. /// </summary>
  103. /// <param name="sql">查询语句。</param>
  104. /// <returns>查询结果。</returns>
  105. /// <exception cref="Exception"></exception>
  106. public static object ExecuteScalar(string sql, params SQLiteParameter[] parameters)
  107. {
  108. using (SQLiteConnection conn = new SQLiteConnection(connectionString))
  109. {
  110. using (SQLiteCommand cmd = new SQLiteCommand(conn))
  111. {
  112. try
  113. {
  114. conn.Open();
  115. cmd.CommandText = sql;
  116. if (parameters.Length != 0)
  117. {
  118. cmd.Parameters.AddRange(parameters);
  119. }
  120. return cmd.ExecuteScalar();
  121. }
  122. catch (Exception) { throw; }
  123. }
  124. }
  125. }
  126. /// <summary>
  127. /// 执行一个查询语句,返回一个包含查询结果的DataTable。
  128. /// </summary>
  129. /// <param name="sql">要执行的查询语句。</param>
  130. /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准。</param>
  131. /// <returns></returns>
  132. /// <exception cref="Exception"></exception>
  133. public static DataTable ExecuteQuery(string sql, params SQLiteParameter[] parameters)
  134. {
  135. using (SQLiteConnection connection = new SQLiteConnection(connectionString))
  136. {
  137. using (SQLiteCommand command = new SQLiteCommand(sql, connection))
  138. {
  139. if (parameters.Length != 0)
  140. {
  141. command.Parameters.AddRange(parameters);
  142. }
  143. SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
  144. DataTable data = new DataTable();
  145. try { adapter.Fill(data); }
  146. catch (Exception) { throw; }
  147. return data;
  148. }
  149. }
  150. }
  151. /// <summary>
  152. /// 执行一个查询语句,返回一个关联的SQLiteDataReader实例。
  153. /// </summary>
  154. /// <param name="sql">要执行的查询语句。</param>
  155. /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准。</param>
  156. /// <returns></returns>
  157. /// <exception cref="Exception"></exception>
  158. public static SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[] parameters)
  159. {
  160. SQLiteConnection connection = new SQLiteConnection(connectionString);
  161. SQLiteCommand command = new SQLiteCommand(sql, connection);
  162. try
  163. {
  164. if (parameters.Length != 0)
  165. {
  166. command.Parameters.AddRange(parameters);
  167. }
  168. connection.Open();
  169. return command.ExecuteReader(CommandBehavior.CloseConnection);
  170. }
  171. catch (Exception) { throw; }
  172. }
  173. /// <summary>
  174. /// 查询数据库中的所有数据类型信息。
  175. /// </summary>
  176. /// <returns></returns>
  177. /// <exception cref="Exception"></exception>
  178. public static DataTable GetSchema()
  179. {
  180. using (SQLiteConnection connection = new SQLiteConnection(connectionString))
  181. {
  182. try
  183. {
  184. connection.Open();
  185. return connection.GetSchema("TABLES");
  186. }
  187. catch (Exception) { throw; }
  188. }
  189. }
  190. /// <summary>
  191. /// 读取Excel第一个工作表的内容
  192. /// </summary>
  193. /// <param name="strPath"></param>
  194. /// <returns></returns>
  195. public static Dictionary<string, DataTable> ReadSQLiteTables()
  196. {
  197. Dictionary<string, DataTable> dictTables = new Dictionary<string, DataTable>();
  198. try
  199. {
  200. string sql = "";
  201. DataTable TablesName = ExecuteQuery("select * from sqlite_master;", new SQLiteParameter[] { });//得到所有表
  202. foreach (DataRow dr in TablesName.Rows)
  203. {
  204. string strTableName = dr[1].ToString();
  205. sql = string.Format("SELECT * FROM [{0}]", strTableName); //查询字符串
  206. dictTables.Add(strTableName, ExecuteQuery(sql, new SQLiteParameter[] { }));
  207. }
  208. }
  209. catch (Exception ex)
  210. {
  211. //发生异常,写入日志
  212. log.Error(ex.Message);
  213. }
  214. return dictTables;
  215. }
  216. }
  217. }