SQLiteHelper3.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.SQLite;
  4. using System.Linq;
  5. using System.Text;
  6. using System.IO;
  7. using System.Data;
  8. using System.Configuration;
  9. namespace OTSModelSharp.DTLBase
  10. {
  11. namespace Helper
  12. {
  13. public class SQLiteHelper3
  14. {
  15. /// <summary>
  16. /// 创建数据库文件
  17. /// </summary>
  18. /// <param name="fileName">文件名</param>
  19. public static void CreateDBFile(string fileName)
  20. {
  21. string path = Environment.CurrentDirectory + @"/Data/";
  22. if (!Directory.Exists(path))
  23. {
  24. Directory.CreateDirectory(path);
  25. }
  26. string databaseFileName = path + fileName;
  27. if (!File.Exists(databaseFileName))
  28. {
  29. SQLiteConnection.CreateFile(databaseFileName);
  30. }
  31. }
  32. /// <summary>
  33. /// 删除数据库
  34. /// </summary>
  35. /// <param name="fileName">文件名</param>
  36. public static void DeleteDBFile(string fileName)
  37. {
  38. string path = Environment.CurrentDirectory + @"/Data/";
  39. if (File.Exists(path))
  40. {
  41. File.Delete(path);
  42. }
  43. }
  44. /// <summary>
  45. /// 生成连接字符串
  46. /// </summary>
  47. /// <returns></returns>
  48. private static string CreateConnectionString()
  49. {
  50. SQLiteConnectionStringBuilder connectionString = new SQLiteConnectionStringBuilder();
  51. //connectionString.DataSource = @"data/data.db";//此处文件名可以使用变量表示
  52. connectionString.DataSource = ConfigurationManager.ConnectionStrings["SQLite"].ConnectionString;
  53. string conStr = connectionString.ToString();
  54. return conStr;
  55. }
  56. private static SQLiteConnection m_dbConnection;
  57. /// <summary>
  58. /// 事务
  59. /// </summary>
  60. public static SQLiteTransaction trans = null;
  61. #region 事务控制
  62. /// <summary>
  63. /// 开始事务
  64. /// </summary>
  65. public static void BeginTransaction()
  66. {
  67. trans = m_dbConnection.BeginTransaction(IsolationLevel.ReadCommitted);
  68. }
  69. /// <summary>
  70. /// 回滚事务
  71. /// </summary>
  72. public static void Rollback()
  73. {
  74. trans.Rollback();
  75. }
  76. /// <summary>
  77. /// 提交事务
  78. /// </summary>
  79. public static void Commit()
  80. {
  81. trans.Commit();
  82. }
  83. #endregion
  84. /// <summary>
  85. /// 连接到数据库
  86. /// </summary>
  87. /// <returns></returns>
  88. public static SQLiteConnection dbConnection()
  89. {
  90. m_dbConnection = new SQLiteConnection(CreateConnectionString());
  91. m_dbConnection.Open();
  92. return m_dbConnection;
  93. }
  94. /// <summary>
  95. /// 在指定数据库中创建一个table
  96. /// </summary>
  97. /// <param name="sql">sql语言,如:create table pat_info (name varchar(20), score int)</param>
  98. /// <returns></returns>
  99. public static bool CreateTable(string sql)
  100. {
  101. try
  102. {
  103. SQLiteCommand command = new SQLiteCommand(sql, dbConnection());
  104. command.ExecuteNonQuery();
  105. return true;
  106. }
  107. catch (Exception ex)
  108. {
  109. //_ErrorLog.Insert("ExecuteNonQuery(" + sql + ")Err:" + ex);
  110. return false;
  111. }
  112. finally
  113. {
  114. closeConn();
  115. }
  116. }
  117. /// <summary>
  118. /// 在指定数据库中删除一个table
  119. /// </summary>
  120. /// <param name="tablename">表名称</param>
  121. /// <returns></returns>
  122. public static bool DeleteTable(string tablename)
  123. {
  124. try
  125. {
  126. SQLiteCommand cmd = new SQLiteCommand("DROP TABLE IF EXISTS " + tablename, dbConnection());
  127. cmd.ExecuteNonQuery();
  128. return true;
  129. }
  130. catch (Exception ex)
  131. {
  132. //_ErrorLog.Insert("ExecuteNonQuery(DROP TABLE IF EXISTS " + tablename + ")Err:" + ex);
  133. return false;
  134. }
  135. finally
  136. {
  137. closeConn();
  138. }
  139. }
  140. /// <summary>
  141. /// 在指定表中添加列
  142. /// </summary>
  143. /// <param name="tablename">表名</param>
  144. /// <param name="columnname">列名</param>
  145. /// <param name="ctype">列的数值类型</param>
  146. /// <returns></returns>
  147. public static bool AddColumn(string tablename, string columnname, string ctype)
  148. {
  149. try
  150. {
  151. SQLiteCommand cmd = new SQLiteCommand("ALTER TABLE " + tablename + " ADD COLUMN " + columnname + " " + ctype, dbConnection());
  152. cmd.ExecuteNonQuery();
  153. return true;
  154. }
  155. catch (Exception ex)
  156. {
  157. //_ErrorLog.Insert("ExecuteNonQuery(ALTER TABLE " + tablename + " ADD COLUMN " + columnname + " " + ctype + ")Err:" + ex);
  158. return false;
  159. }
  160. finally
  161. {
  162. closeConn();
  163. }
  164. }
  165. /// <summary>
  166. /// 执行增删改查操作
  167. /// </summary>
  168. /// <param name="sql">查询语言</param>
  169. /// <returns></returns>
  170. public static int ExecuteNonQuery(string sql)
  171. {
  172. try
  173. {
  174. SQLiteCommand cmd;
  175. cmd = new SQLiteCommand(sql, dbConnection());
  176. cmd.ExecuteNonQuery().ToString();
  177. return 1;
  178. }
  179. catch (Exception ex)
  180. {
  181. //_ErrorLog.Insert("ExecuteNonQuery(" + sql + ")Err:" + ex);
  182. return 0;
  183. }
  184. finally
  185. {
  186. closeConn();
  187. }
  188. }
  189. /// <summary>
  190. /// <para>执行SQL,返回受影响的行数</para>
  191. /// <para>可用于执行表创建语句</para>
  192. /// <para>paramArr == null 表示无参数</para>
  193. /// </summary>
  194. /// <param name="sql"></param>
  195. /// <returns></returns>
  196. public static int ExecuteNonQuery(string sql, SQLiteParameter[] paramArr)
  197. {
  198. if (sql == null)
  199. {
  200. throw new ArgumentNullException("sql=null");
  201. }
  202. SQLiteCommand cmd = new SQLiteCommand();
  203. cmd.CommandText = sql;
  204. if (paramArr != null)
  205. {
  206. foreach (SQLiteParameter p in paramArr)
  207. {
  208. cmd.Parameters.Add(p);
  209. }
  210. }
  211. cmd.Connection = m_dbConnection;
  212. int i = cmd.ExecuteNonQuery();
  213. return i;
  214. }
  215. /// <summary>
  216. /// 返回一条记录查询
  217. /// </summary>
  218. /// <param name="sql">sql查询语言</param>
  219. /// <returns>返回字符串数组</returns>
  220. public static string[] SqlRow(string sql)
  221. {
  222. try
  223. {
  224. SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection());//sql语句
  225. SQLiteDataReader reader = sqlcmd.ExecuteReader();
  226. if (!reader.Read())
  227. {
  228. return null;
  229. }
  230. string[] Row = new string[reader.FieldCount];
  231. for (int i = 0; i < reader.FieldCount; i++)
  232. {
  233. Row[i] = (reader[i].ToString());
  234. }
  235. reader.Close();
  236. return Row;
  237. }
  238. catch (Exception ex)
  239. {
  240. //_ErrorLog.Insert("SqlRow(" + sql + ")Err:" + ex);
  241. return null;
  242. }
  243. finally
  244. {
  245. closeConn();
  246. }
  247. }
  248. /// <summary>
  249. /// 唯一结果查询
  250. /// </summary>
  251. /// <param name="sql">sql查询语言</param>
  252. /// <returns>返回一个字符串</returns>
  253. public static string sqlone(string sql)
  254. {
  255. try
  256. {
  257. SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection());//sql语句
  258. return sqlcmd.ExecuteScalar().ToString();
  259. }
  260. catch
  261. {
  262. return "";
  263. }
  264. finally
  265. {
  266. closeConn();
  267. }
  268. }
  269. /// <summary>
  270. /// 获取一列数据
  271. /// </summary>
  272. /// <param name="sql">单列查询</param>
  273. /// <param name="count">返回结果数量</param>
  274. /// <returns>返回一个数组</returns>
  275. public static List<string> sqlcolumn(string sql)
  276. {
  277. try
  278. {
  279. List<string> Column = new List<string>();
  280. SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection());//sql语句
  281. SQLiteDataReader reader = sqlcmd.ExecuteReader();
  282. while (reader.Read())
  283. {
  284. Column.Add(reader[0].ToString());
  285. }
  286. reader.Close();
  287. return Column;
  288. }
  289. catch (Exception ex)
  290. {
  291. //_ErrorLog.Insert("sqlcolumn(" + sql + ")Err:" + ex);
  292. return null;
  293. }
  294. finally
  295. {
  296. closeConn();
  297. }
  298. }
  299. /// <summary>
  300. /// 返回记录集查询
  301. /// </summary>
  302. /// <param name="sql">sql查询语言</param>
  303. /// <returns>返回查询结果集</returns>
  304. public static DataTable SqlTable(string sql)
  305. {
  306. try
  307. {
  308. SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection());//sql语句
  309. sqlcmd.CommandTimeout = 120;
  310. SQLiteDataReader reader = sqlcmd.ExecuteReader();
  311. DataTable dt = new DataTable();
  312. if (reader != null)
  313. {
  314. dt.Load(reader, LoadOption.PreserveChanges, null);
  315. }
  316. return dt;
  317. }
  318. catch (Exception ex)
  319. {
  320. //_ErrorLog.Insert("SqlReader(" + sql + ")Err:" + ex);
  321. return null;
  322. }
  323. finally
  324. {
  325. closeConn();
  326. }
  327. }
  328. /// <summary>
  329. /// 关闭数据库连接
  330. /// </summary>
  331. public static void closeConn()
  332. {
  333. try
  334. {
  335. if (m_dbConnection.State == ConnectionState.Open)
  336. m_dbConnection.Close();
  337. else if (m_dbConnection.State == ConnectionState.Broken)
  338. {
  339. m_dbConnection.Close();
  340. }
  341. }
  342. catch (Exception ex)
  343. {
  344. //_ErrorLog.Insert("closeConnErr:" + ex);
  345. }
  346. }
  347. }
  348. }
  349. }