SqLiteHelper.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Data.SQLite;
  7. using System.Data;
  8. namespace SqLiteHelperNamespace
  9. {
  10. /// <summary>
  11. /// SQLite 操作类
  12. /// </summary>
  13. class SqLiteHelper
  14. {
  15. /// <summary>
  16. /// 数据库连接定义
  17. /// </summary>
  18. private SQLiteConnection dbConnection;
  19. /// <summary>
  20. /// SQL命令定义
  21. /// </summary>
  22. private SQLiteCommand dbCommand;
  23. private SQLiteDataAdapter dataAdapter;
  24. /// <summary>
  25. /// 数据读取定义
  26. /// </summary>
  27. private SQLiteDataReader dataReader;
  28. private DataTable dt;
  29. /// <summary>
  30. /// 创建一个指定名字的数据库
  31. /// </summary>
  32. /// <param name="basename"></param>
  33. public void CreateNewDatabase(string basename)
  34. {
  35. try
  36. {
  37. SQLiteConnection.CreateFile(basename);
  38. }
  39. catch (Exception)
  40. {
  41. }
  42. }
  43. /// <summary>
  44. /// 删除指定的数据库文件
  45. /// </summary>
  46. /// <param name="basename"></param>
  47. public void DeleteDataBase(string basename)
  48. {
  49. try
  50. {
  51. if (System.IO.File.Exists(basename))
  52. {
  53. System.IO.File.Delete(basename);
  54. }
  55. }
  56. catch (Exception)
  57. {
  58. }
  59. }
  60. /// <summary>
  61. /// 构造函数
  62. /// </summary>
  63. /// <param name="connectionString">连接SQLite库字符串</param>
  64. public SqLiteHelper(string connectionString)
  65. {
  66. try
  67. {
  68. dbConnection = new SQLiteConnection(connectionString);
  69. dbConnection.Open();
  70. }
  71. catch (Exception)
  72. {
  73. //Log(e.ToString());
  74. }
  75. }
  76. /// <summary>
  77. /// 执行SQL命令
  78. /// </summary>
  79. /// <returns>The query.</returns>
  80. /// <param name="queryString">SQL命令字符串</param>
  81. public DataTable ExecuteQuery(string queryString)
  82. {
  83. try
  84. {
  85. dataAdapter = new SQLiteDataAdapter(queryString, dbConnection);
  86. DataSet ds= new DataSet();
  87. dataAdapter.Fill(ds);
  88. dt = ds.Tables[0];
  89. }
  90. catch (Exception e)
  91. {
  92. //Log(e.Message);
  93. }
  94. return dt;
  95. }
  96. /// <summary>
  97. /// 关闭数据库连接
  98. /// </summary>
  99. public void CloseConnection()
  100. {
  101. //销毁Commend
  102. if (dbCommand != null)
  103. {
  104. dbCommand.Cancel();
  105. }
  106. dbCommand = null;
  107. //销毁Reader
  108. if (dataReader != null)
  109. {
  110. dataReader.Close();
  111. }
  112. dataReader = null;
  113. //销毁Connection
  114. if (dbConnection != null)
  115. {
  116. dbConnection.Close();
  117. }
  118. dbConnection = null;
  119. }
  120. /// <summary>
  121. /// 读取整张数据表
  122. /// </summary>
  123. /// <returns>The full table.</returns>
  124. /// <param name="tableName">数据表名称</param>
  125. public DataTable ReadFullTable(string tableName)
  126. {
  127. string queryString = "SELECT * FROM " + tableName;
  128. return ExecuteQuery(queryString);
  129. }
  130. /// <summary>
  131. /// 向指定数据表中插入数据
  132. /// </summary>
  133. /// <returns>The values.</returns>
  134. /// <param name="tableName">数据表名称</param>
  135. /// <param name="values">插入的数值</param>
  136. public DataTable InsertValues(string tableName, string[] values)
  137. {
  138. //获取数据表中字段数目
  139. int fieldCount = ReadFullTable(tableName).Columns.Count;
  140. //当插入的数据长度不等于字段数目时引发异常
  141. if (values.Length != fieldCount)
  142. {
  143. throw new SQLiteException("values.Length!=fieldCount");
  144. }
  145. string queryString = "INSERT INTO " + tableName + " VALUES (" + "'" + values[0] + "'";
  146. for (int i = 1; i < values.Length; i++)
  147. {
  148. queryString += ", " + "'" + values[i] + "'";
  149. }
  150. queryString += " )";
  151. return ExecuteQuery(queryString);
  152. }
  153. /// <summary>
  154. /// 更新指定数据表内的数据
  155. /// </summary>
  156. /// <returns>The values.</returns>
  157. /// <param name="tableName">数据表名称</param>
  158. /// <param name="colNames">字段名</param>
  159. /// <param name="colValues">字段名对应的数据</param>
  160. /// <param name="key">关键字</param>
  161. /// <param name="value">关键字对应的值</param>
  162. /// <param name="operation">运算符:=,<,>,...,默认“=”</param>
  163. public DataTable UpdateValues(string tableName, string[] colNames, string[] colValues, string key, string value, string operation = "=")
  164. {
  165. //当字段名称和字段数值不对应时引发异常
  166. if (colNames.Length != colValues.Length)
  167. {
  168. throw new SQLiteException("colNames.Length!=colValues.Length");
  169. }
  170. string queryString = "UPDATE " + tableName + " SET " + colNames[0] + "=" + "'" + colValues[0] + "'";
  171. for (int i = 1; i < colValues.Length; i++)
  172. {
  173. queryString += ", " + colNames[i] + "=" + "'" + colValues[i] + "'";
  174. }
  175. queryString += " WHERE " + key + operation + "'" + value + "'";
  176. return ExecuteQuery(queryString);
  177. }
  178. /// <summary>
  179. /// 删除指定数据表内的数据
  180. /// </summary>
  181. /// <returns>The values.</returns>
  182. /// <param name="tableName">数据表名称</param>
  183. /// <param name="colNames">字段名</param>
  184. /// <param name="colValues">字段名对应的数据</param>
  185. public DataTable DeleteValuesOR(string tableName, string[] colNames, string[] colValues, string[] operations)
  186. {
  187. //当字段名称和字段数值不对应时引发异常
  188. if (colNames.Length != colValues.Length || operations.Length != colNames.Length || operations.Length != colValues.Length)
  189. {
  190. throw new SQLiteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length");
  191. }
  192. string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + "'" + colValues[0] + "'";
  193. for (int i = 1; i < colValues.Length; i++)
  194. {
  195. queryString += "OR " + colNames[i] + operations[0] + "'" + colValues[i] + "'";
  196. }
  197. return ExecuteQuery(queryString);
  198. }
  199. /// <summary>
  200. /// 删除指定数据表内的数据
  201. /// </summary>
  202. /// <returns>The values.</returns>
  203. /// <param name="tableName">数据表名称</param>
  204. /// <param name="colNames">字段名</param>
  205. /// <param name="colValues">字段名对应的数据</param>
  206. public DataTable DeleteValuesAND(string tableName, string[] colNames, string[] colValues, string[] operations)
  207. {
  208. //当字段名称和字段数值不对应时引发异常
  209. if (colNames.Length != colValues.Length || operations.Length != colNames.Length || operations.Length != colValues.Length)
  210. {
  211. throw new SQLiteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length");
  212. }
  213. string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + "'" + colValues[0] + "'";
  214. for (int i = 1; i < colValues.Length; i++)
  215. {
  216. queryString += " AND " + colNames[i] + operations[i] + "'" + colValues[i] + "'";
  217. }
  218. return ExecuteQuery(queryString);
  219. }
  220. /// <summary>
  221. /// 创建数据表
  222. /// </summary> +
  223. /// <returns>The table.</returns>
  224. /// <param name="tableName">数据表名</param>
  225. /// <param name="colNames">字段名</param>
  226. /// <param name="colTypes">字段名类型</param>
  227. public DataTable CreateTable(string tableName, string[] colNames, string[] colTypes)
  228. {
  229. string queryString = "CREATE TABLE IF NOT EXISTS " + tableName + "( " + colNames[0] + " " + colTypes[0];
  230. for (int i = 1; i < colNames.Length; i++)
  231. {
  232. queryString += ", " + colNames[i] + " " + colTypes[i];
  233. }
  234. queryString += " ) ";
  235. return ExecuteQuery(queryString);
  236. }
  237. /// <summary>
  238. /// 删除数据库表
  239. /// </summary>
  240. /// <param name="tableName"></param>
  241. /// <returns></returns>
  242. public DataTable DeleteTable(string tableName)
  243. {
  244. string queryString = "drop table "+ tableName;
  245. return ExecuteQuery(queryString);
  246. }
  247. /// <summary>
  248. /// Reads the table.
  249. /// </summary>
  250. /// <returns>The table.</returns>
  251. /// <param name="tableName">Table name.</param>
  252. /// <param name="items">Items.</param>
  253. /// <param name="colNames">Col names.</param>
  254. /// <param name="operations">Operations.</param>
  255. /// <param name="colValues">Col values.</param>
  256. public DataTable ReadTable(string tableName, string[] items, string[] colNames, string[] operations, string[] colValues)
  257. {
  258. string queryString = "SELECT " + items[0];
  259. for (int i = 1; i < items.Length; i++)
  260. {
  261. queryString += ", " + items[i];
  262. }
  263. queryString += " FROM " + tableName + " where 1=1";
  264. //+ " WHERE " + colNames[0] + " " + operations[0] + " " + colValues[0];
  265. for (int i = 0; i < colNames.Length; i++)
  266. {
  267. queryString += " AND " + colNames[i] + " " + operations[i] + " " + colValues[0] + " ";
  268. }
  269. return ExecuteQuery(queryString);
  270. }
  271. }
  272. }