1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 using System.Data.Common;
7 using System.Data.SQLite;
8
9 namespace Tools.Data
10 {
11 /// <summary>
12 /// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化
13 /// </summary>
14 public static class SQLiteHelper
15 {
16 #region
17 #region ExecuteNonQuery
18 /// <summary>
19 /// 执行数据库操作(新增、更新或删除)
20 /// </summary>
21 /// <param name="connectionString">连接字符串</param>
22 /// <param name="cmd">SqlCommand对象</param>
23 /// <returns>所受影响的行数</returns>
24 public static int ExecuteNonQuery(string connectionString, SQLiteCommand cmd)
25 {
26 int result = 0;
27 if (connectionString == null || connectionString.Length == 0)
28 throw new ArgumentNullException("connectionString");
29 using (SQLiteConnection con = new SQLiteConnection(connectionString))
30 {
31 SQLiteTransaction trans = null;
32 PrepareCommand(cmd, con, ref trans, true, cmd.CommandType, cmd.CommandText);
33 try
34 {
35 result = cmd.ExecuteNonQuery();
36 trans.Commit();
37 }
38 catch (Exception ex)
39 {
40 trans.Rollback();
41 throw ex;
42 }
43 }
44 return result;
45 }
46
47 /// <summary>
48 /// 执行数据库操作(新增、更新或删除)
49 /// </summary>
50 /// <param name="connectionString">连接字符串</param>
51 /// <param name="commandText">执行语句或存储过程名</param>
52 /// <param name="commandType">执行类型</param>
53 /// <returns>所受影响的行数</returns>
54 public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType)
55 {
56 int result = 0;
57 if (connectionString == null || connectionString.Length == 0)
58 throw new ArgumentNullException("connectionString");
59 if (commandText == null || commandText.Length == 0)
60 throw new ArgumentNullException("commandText");
61 SQLiteCommand cmd = new SQLiteCommand();
62 using (SQLiteConnection con = new SQLiteConnection(connectionString))
63 {
64 SQLiteTransaction trans = null;
65 PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
66 try
67 {
68 result = cmd.ExecuteNonQuery();
69 trans.Commit();
70 }
71 catch (Exception ex)
72 {
73 trans.Rollback();
74 throw ex;
75 }
76 }
77 return result;
78 }
79
80 /// <summary>
81 /// 执行数据库操作(新增、更新或删除)
82 /// </summary>
83 /// <param name="connectionString">连接字符串</param>
84 /// <param name="commandText">执行语句或存储过程名</param>
85 /// <param name="commandType">执行类型</param>
86 /// <param name="cmdParms">SQL参数对象</param>
87 /// <returns>所受影响的行数</returns>
88 public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms)
89 {
90 int result = 0;
91 if (connectionString == null || connectionString.Length == 0)
92 throw new ArgumentNullException("connectionString");
93 if (commandText == null || commandText.Length == 0)
94 throw new ArgumentNullException("commandText");
95
96 SQLiteCommand cmd = new SQLiteCommand();
97 using (SQLiteConnection con = new SQLiteConnection(connectionString))
98 {
99 SQLiteTransaction trans = null;
100 PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
101 try
102 {
103 result = cmd.ExecuteNonQuery();
104 trans.Commit();
105 }
106 catch (Exception ex)
107 {
108 trans.Rollback();
109 throw ex;
110 }
111 }
112 return result;
113 }
114 #endregion
115
116 #region ExecuteScalar
117 /// <summary>
118 /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
119 /// </summary>
120 /// <param name="connectionString">连接字符串</param>
121 /// <param name="cmd">SqlCommand对象</param>
122 /// <returns>查询所得的第1行第1列数据</returns>
123 public static object ExecuteScalar(string connectionString, SQLiteCommand cmd)
124 {
125 object result = 0;
126 if (connectionString == null || connectionString.Length == 0)
127 throw new ArgumentNullException("connectionString");
128 using (SQLiteConnection con = new SQLiteConnection(connectionString))
129 {
130 SQLiteTransaction trans = null;
131 PrepareCommand(cmd, con, ref trans, true, cmd.CommandType, cmd.CommandText);
132 try
133 {
134 result = cmd.ExecuteScalar();
135 trans.Commit();
136 }
137 catch (Exception ex)
138 {
139 trans.Rollback();
140 throw ex;
141 }
142 }
143 return result;
144 }
145
146 /// <summary>
147 /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
148 /// </summary>
149 /// <param name="connectionString">连接字符串</param>
150 /// <param name="commandText">执行语句或存储过程名</param>
151 /// <param name="commandType">执行类型</param>
152 /// <returns>查询所得的第1行第1列数据</returns>
153 public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType)
154 {
155 object result = 0;
156 if (connectionString == null || connectionString.Length == 0)
157 throw new ArgumentNullException("connectionString");
158 if (commandText == null || commandText.Length == 0)
159 throw new ArgumentNullException("commandText");
160 SQLiteCommand cmd = new SQLiteCommand();
161 using (SQLiteConnection con = new SQLiteConnection(connectionString))
162 {
163 SQLiteTransaction trans = null;
164 PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
165 try
166 {
167 result = cmd.ExecuteScalar();
168 trans.Commit();
169 }
170 catch (Exception ex)
171 {
172 trans.Rollback();
173 throw ex;
174 }
175 }
176 return result;
177 }
178
179 /// <summary>
180 /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
181 /// </summary>
182 /// <param name="connectionString">连接字符串</param>
183 /// <param name="commandText">执行语句或存储过程名</param>
184 /// <param name="commandType">执行类型</param>
185 /// <param name="cmdParms">SQL参数对象</param>
186 /// <returns>查询所得的第1行第1列数据</returns>
187 public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms)
188 {
189 object result = 0;
190 if (connectionString == null || connectionString.Length == 0)
191 throw new ArgumentNullException("connectionString");
192 if (commandText == null || commandText.Length == 0)
193 throw new ArgumentNullException("commandText");
194
195 SQLiteCommand cmd = new SQLiteCommand();
196 using (SQLiteConnection con = new SQLiteConnection(connectionString))
197 {
198 SQLiteTransaction trans = null;
199 PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
200 try
201 {
202 result = cmd.ExecuteScalar();
203 trans.Commit();
204 }
205 catch (Exception ex)
206 {
207 trans.Rollback();
208 throw ex;
209 }
210 }
211 return result;
212 }
213 #endregion
214
215 #region ExecuteReader
216 /// <summary>
217 /// 执行数据库查询,返回SqlDataReader对象
218 /// </summary>
219 /// <param name="connectionString">连接字符串</param>
220 /// <param name="cmd">SqlCommand对象</param>
221 /// <returns>SqlDataReader对象</returns>
222 public static DbDataReader ExecuteReader(string connectionString, SQLiteCommand cmd)
223 {
224 DbDataReader reader = null;
225 if (connectionString == null || connectionString.Length == 0)
226 throw new ArgumentNullException("connectionString");
227
228 SQLiteConnection con = new SQLiteConnection(connectionString);
229 SQLiteTransaction trans = null;
230 PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText);
231 try
232 {
233 reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
234 }
235 catch (Exception ex)
236 {
237 throw ex;
238 }
239 return reader;
240 }
241
242 /// <summary>
243 /// 执行数据库查询,返回SqlDataReader对象
244 /// </summary>
245 /// <param name="connectionString">连接字符串</param>
246 /// <param name="commandText">执行语句或存储过程名</param>
247 /// <param name="commandType">执行类型</param>
248 /// <returns>SqlDataReader对象</returns>
249 public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType)
250 {
251 DbDataReader reader = null;
252 if (connectionString == null || connectionString.Length == 0)
253 throw new ArgumentNullException("connectionString");
254 if (commandText == null || commandText.Length == 0)
255 throw new ArgumentNullException("commandText");
256
257 SQLiteConnection con = new SQLiteConnection(connectionString);
258 SQLiteCommand cmd = new SQLiteCommand();
259 SQLiteTransaction trans = null;
260 PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
261 try
262 {
263 reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
264 }
265 catch (Exception ex)
266 {
267 throw ex;
268 }
269 return reader;
270 }
271
272 /// <summary>
273 /// 执行数据库查询,返回SqlDataReader对象
274 /// </summary>
275 /// <param name="connectionString">连接字符串</param>
276 /// <param name="commandText">执行语句或存储过程名</param>
277 /// <param name="commandType">执行类型</param>
278 /// <param name="cmdParms">SQL参数对象</param>
279 /// <returns>SqlDataReader对象</returns>
280 public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms)
281 {
282 DbDataReader reader = null;
283 if (connectionString == null || connectionString.Length == 0)
284 throw new ArgumentNullException("connectionString");
285 if (commandText == null || commandText.Length == 0)
286 throw new ArgumentNullException("commandText");
287
288 SQLiteConnection con = new SQLiteConnection(connectionString);
289 SQLiteCommand cmd = new SQLiteCommand();
290 SQLiteTransaction trans = null;
291 PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);
292 try
293 {
294 reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
295 }
296 catch (Exception ex)
297 {
298 throw ex;
299 }
300 return reader;
301 }
302 #endregion
303
304 #region ExecuteDataSet
305 /// <summary>
306 /// 执行数据库查询,返回DataSet对象
307 /// </summary>
308 /// <param name="connectionString">连接字符串</param>
309 /// <param name="cmd">SqlCommand对象</param>
310 /// <returns>DataSet对象</returns>
311 public static DataSet ExecuteDataSet(string connectionString, SQLiteCommand cmd)
312 {
313 DataSet ds = new DataSet();
314 SQLiteConnection con = new SQLiteConnection(connectionString);
315 SQLiteTransaction trans = null;
316 PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText);
317 try
318 {
319 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
320 sda.Fill(ds);
321 }
322 catch (Exception ex)
323 {
324 throw ex;
325 }
326 finally
327 {
328 if (cmd.Connection != null)
329 {
330 if (cmd.Connection.State == ConnectionState.Open)
331 {
332 cmd.Connection.Close();
333 }
334 }
335 }
336 return ds;
337 }
338
339 /// <summary>
340 /// 执行数据库查询,返回DataSet对象
341 /// </summary>
342 /// <param name="connectionString">连接字符串</param>
343 /// <param name="commandText">执行语句或存储过程名</param>
344 /// <param name="commandType">执行类型</param>
345 /// <returns>DataSet对象</returns>
346 public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType)
347 {
348 if (connectionString == null || connectionString.Length == 0)
349 throw new ArgumentNullException("connectionString");
350 if (commandText == null || commandText.Length == 0)
351 throw new ArgumentNullException("commandText");
352 DataSet ds = new DataSet();
353 SQLiteConnection con = new SQLiteConnection(connectionString);
354 SQLiteCommand cmd = new SQLiteCommand();
355 SQLiteTransaction trans = null;
356 PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
357 try
358 {
359 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
360 sda.Fill(ds);
361 }
362 catch (Exception ex)
363 {
364 throw ex;
365 }
366 finally
367 {
368 if (con != null)
369 {
370 if (con.State == ConnectionState.Open)
371 {
372 con.Close();
373 }
374 }
375 }
376 return ds;
377 }
378
379 /// <summary>
380 /// 执行数据库查询,返回DataSet对象
381 /// </summary>
382 /// <param name="connectionString">连接字符串</param>
383 /// <param name="commandText">执行语句或存储过程名</param>
384 /// <param name="commandType">执行类型</param>
385 /// <param name="cmdParms">SQL参数对象</param>
386 /// <returns>DataSet对象</returns>
387 public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms)
388 {
389 if (connectionString == null || connectionString.Length == 0)
390 throw new ArgumentNullException("connectionString");
391 if (commandText == null || commandText.Length == 0)
392 throw new ArgumentNullException("commandText");
393 DataSet ds = new DataSet();
394 SQLiteConnection con = new SQLiteConnection(connectionString);
395 SQLiteCommand cmd = new SQLiteCommand();
396 SQLiteTransaction trans = null;
397 PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);
398 try
399 {
400 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
401 sda.Fill(ds);
402 }
403 catch (Exception ex)
404 {
405 throw ex;
406 }
407 finally
408 {
409 if (con != null)
410 {
411 if (con.State == ConnectionState.Open)
412 {
413 con.Close();
414 }
415 }
416 }
417 return ds;
418 }
419 #endregion
420
421 /// <summary>
422 /// 通用分页查询方法
423 /// </summary>
424 /// <param name="connString">连接字符串</param>
425 /// <param name="tableName">表名</param>
426 /// <param name="strColumns">查询字段名</param>
427 /// <param name="strWhere">where条件</param>
428 /// <param name="strOrder">排序条件</param>
429 /// <param name="pageSize">每页数据数量</param>
430 /// <param name="currentIndex">当前页数</param>
431 /// <param name="recordOut">数据总量</param>
432 /// <returns>DataTable数据表</returns>
433 public static DataTable SelectPaging(string connString, string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut)
434 {
435 DataTable dt = new DataTable();
436 recordOut = Convert.ToInt32(ExecuteScalar(connString, "select count(*) from " + tableName, CommandType.Text));
437 string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";
438 int offsetCount = (currentIndex - 1) * pageSize;
439 string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());
440 using (DbDataReader reader = ExecuteReader(connString, commandText, CommandType.Text))
441 {
442 if (reader != null)
443 {
444 dt.Load(reader);
445 }
446 }
447 return dt;
448 }
449
450 /// <summary>
451 /// 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化
452 /// </summary>
453 /// <param name="cmd">Command对象</param>
454 /// <param name="conn">Connection对象</param>
455 /// <param name="trans">Transcation对象</param>
456 /// <param name="useTrans">是否使用事务</param>
457 /// <param name="cmdType">SQL字符串执行类型</param>
458 /// <param name="cmdText">SQL Text</param>
459 /// <param name="cmdParms">SQLiteParameters to use in the command</param>
460 private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, ref SQLiteTransaction trans, bool useTrans, CommandType cmdType, string cmdText, params SQLiteParameter[] cmdParms)
461 {
462
463 if (conn.State != ConnectionState.Open)
464 conn.Open();
465
466 cmd.Connection = conn;
467 cmd.CommandText = cmdText;
468
469 if (useTrans)
470 {
471 trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
472 cmd.Transaction = trans;
473 }
474
475
476 cmd.CommandType = cmdType;
477
478 if (cmdParms != null)
479 {
480 foreach (SQLiteParameter parm in cmdParms)
481 cmd.Parameters.Add(parm);
482 }
483 }
484 #endregion
485 }
486 }