SQLite-C#-幫助類

  1  public static class SQLiteHelper
  2     {
  3         private static string connectionString = string.Empty;
  4 
  5         #region void SetConnectionString(string datasource, string password, int version = 3) 根據數據源、密碼、版本號設置鏈接字符串
  6         /// <summary>
  7         /// 根據數據源、密碼、版本號設置鏈接字符串。
  8         /// </summary>
  9         /// <param name="datasource">數據源。</param>
 10         /// <param name="password">密碼。</param>
 11         /// <param name="version">版本號(缺省爲3)。</param>
 12         public static void SetConnectionString(string datasource, string password, int version = 3)
 13         {
 14             connectionString = string.Format("Data Source={0};Version={1};password={2};Pooling=true;FailIfMissing=false",
 15                 datasource, version, password);
 16         }
 17         #endregion
 18 
 19         #region void CreateDB(string dbName) 建立一個數據庫文件。若是存在同名數據庫文件,則會覆蓋。
 20         /// <summary>
 21         /// 建立一個數據庫文件。若是存在同名數據庫文件,則會覆蓋。
 22         /// </summary>
 23         /// <param name="dbName">數據庫文件名。爲null或空串時不建立。</param>
 24         /// <param name="password">(可選)數據庫密碼,默認爲空。</param>
 25         /// <exception cref="Exception"></exception>
 26         public static void CreateDB(string dbName)
 27         {
 28             if (!string.IsNullOrEmpty(dbName))
 29             {
 30                 try { SQLiteConnection.CreateFile(dbName); }
 31                 catch (Exception) { throw; }
 32             }
 33         }
 34         #endregion
 35 
 36         #region void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params SQLiteParameter[] parameters)準備操做命令參數
 37         /// <summary>
 38         /// 準備操做命令參數
 39         /// </summary>
 40         /// <param name="cmd">SQLiteCommand</param>
 41         /// <param name="conn">SQLiteConnection</param>
 42         /// <param name="cmdText">Sql命令文本</param>
 43         private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params SQLiteParameter[] parameters)
 44         {
 45             if (conn.State != ConnectionState.Open)
 46                 conn.Open();
 47             cmd.Parameters.Clear();
 48             cmd.Connection = conn;
 49             cmd.CommandText = cmdText;
 50             cmd.CommandType = CommandType.Text;
 51             cmd.CommandTimeout = 30;
 52             if (parameters.Length != 0)
 53             {
 54                 cmd.Parameters.AddRange(parameters);
 55             }
 56         }
 57         #endregion
 58 
 59         #region ExecuteNonQuery(string sql, params SQLiteParameter[] parameters) 對SQLite數據庫執行增刪改操做,返回受影響的行數。 
 60         /// <summary> 
 61         /// 對SQLite數據庫執行增刪改操做,返回受影響的行數。 
 62         /// </summary> 
 63         /// <param name="sql">要執行的增刪改的SQL語句。</param> 
 64         /// <param name="parameters">執行增刪改語句所須要的參數,參數必須以它們在SQL語句中的順序爲準。</param> 
 65         /// <returns></returns> 
 66         /// <exception cref="Exception"></exception>
 67         public static int ExecuteNonQuery(string sql, params SQLiteParameter[] parameters)
 68         {
 69             int affectedRows = 0;
 70             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
 71             {
 72                 using (SQLiteCommand command = new SQLiteCommand())
 73                 {
 74                     try
 75                     {
 76                         PrepareCommand(command, connection, sql, parameters);
 77                         affectedRows = command.ExecuteNonQuery();
 78                     }
 79                     catch (Exception) { throw; }
 80                 }
 81             }
 82             return affectedRows;
 83         }
 84         #endregion
 85 
 86         #region void ExecuteNonQueryBatch(List<KeyValuePair<string, SQLiteParameter[]>> list) 批量處理數據操做語句
 87         /// <summary>
 88         /// 批量處理數據操做語句。
 89         /// </summary>
 90         /// <param name="list">SQL語句集合。</param>
 91         /// <exception cref="Exception"></exception>
 92         public static void ExecuteNonQueryBatch(List<KeyValuePair<string, SQLiteParameter[]>> list)
 93         {
 94             using (SQLiteConnection conn = new SQLiteConnection(connectionString))
 95             {
 96                 if (conn.State != ConnectionState.Open)
 97                     conn.Open();
 98                 using (SQLiteTransaction tran = conn.BeginTransaction())
 99                 {
100                     using (SQLiteCommand cmd = new SQLiteCommand(conn))
101                     {
102                         try
103                         {
104                             foreach (var item in list)
105                             {
106                                 cmd.CommandText = item.Key;
107                                 if (item.Value != null)
108                                 {
109                                     cmd.Parameters.AddRange(item.Value);
110                                 }
111                                 cmd.ExecuteNonQuery();
112                             }
113                             tran.Commit();
114                         }
115                         catch (Exception) { tran.Rollback(); throw; }
116                     }
117                 }
118             }
119         }
120         #endregion
121 
122         #region object ExecuteScalar(string sql, params SQLiteParameter[] parameters) 執行查詢語句,並返回第一個結果。
123         /// <summary>
124         /// 執行查詢語句,並返回第一個結果。
125         /// </summary>
126         /// <param name="sql">查詢語句。</param>
127         /// <returns>查詢結果。</returns>
128         /// <exception cref="Exception"></exception>
129         public static object ExecuteScalar(string sql, params SQLiteParameter[] parameters)
130         {
131             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
132             {
133                 using (SQLiteCommand command = new SQLiteCommand())
134                 {
135                     try
136                     {
137                         PrepareCommand(command, connection, sql, parameters);
138 
139                         return command.ExecuteScalar();
140                     }
141                     catch (Exception) { throw; }
142                 }
143             }
144         }
145         #endregion
146 
147         #region DataTable ExecuteQuery(string sql, params SQLiteParameter[] parameters)執行一個查詢語句,返回一個包含查詢結果的DataTable。 
148         /// <summary> 
149         /// 執行一個查詢語句,返回一個包含查詢結果的DataTable。 
150         /// </summary> 
151         /// <param name="sql">要執行的查詢語句。</param> 
152         /// <param name="parameters">執行SQL查詢語句所須要的參數,參數必須以它們在SQL語句中的順序爲準。</param> 
153         /// <returns></returns> 
154         /// <exception cref="Exception"></exception>
155         public static DataTable ExecuteQuery(string sql, params SQLiteParameter[] parameters)
156         {
157             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
158             {
159                 using (SQLiteCommand command = new SQLiteCommand())
160                 {
161                     PrepareCommand(command, connection, sql, parameters);
162 
163                     SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
164                     DataTable data = new DataTable();
165                     try { adapter.Fill(data); }
166                     catch (Exception) { throw; }
167                     return data;
168                 }
169             }
170         }
171 
172         #endregion
173 
174         #region SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[] parameters) 執行一個查詢語句,返回一個關聯的SQLiteDataReader實例。 
175         /// <summary> 
176         /// 執行一個查詢語句,返回一個關聯的SQLiteDataReader實例。 
177         /// </summary> 
178         /// <param name="sql">要執行的查詢語句。</param> 
179         /// <param name="parameters">執行SQL查詢語句所須要的參數,參數必須以它們在SQL語句中的順序爲準。</param> 
180         /// <returns></returns> 
181         /// <exception cref="Exception"></exception>
182         public static SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[] parameters)
183         {
184             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
185             {
186                 using (SQLiteCommand command = new SQLiteCommand())
187                 {
188                     try
189                     {
190                         PrepareCommand(command, connection, sql, parameters);
191                         return command.ExecuteReader(CommandBehavior.CloseConnection);
192                     }
193                     catch (Exception) { throw; }
194                 }
195             }
196         }
197 
198         #endregion
199 
200         #region DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params SQLiteParameter[] parameters)分頁查詢
201         /// <summary>
202         /// 分頁查詢
203         /// </summary>
204         /// <param name="recordCount">總記錄數</param>
205         /// <param name="pageIndex">頁牽引</param>
206         /// <param name="pageSize">頁大小</param>
207         /// <param name="cmdText">Sql命令文本</param>
208         /// <param name="countText">查詢總記錄數的Sql文本</param>
209         /// <param name="parameters">命令參數</param>
210         /// <returns>DataSet</returns>
211         public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params SQLiteParameter[] parameters)
212         {
213             if (recordCount < 0)
214                 recordCount = int.Parse(ExecuteScalar(countText).ToString());
215             var ds = new DataSet();
216             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
217             {
218                 using (SQLiteCommand command = new SQLiteCommand())
219                 {
220                     PrepareCommand(command, connection, cmdText, parameters);
221 
222                     SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
223                     adapter.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
224                 }
225                 return ds;
226             }
227         } 
228         #endregion
229 
230         #region DataTable GetSchema()查詢數據庫中的全部數據類型信息
231         /// <summary> 
232         /// 查詢數據庫中的全部數據類型信息。
233         /// </summary> 
234         /// <returns></returns> 
235         /// <exception cref="Exception"></exception>
236         public static DataTable GetSchema()
237         {
238             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
239             {
240                 try
241                 {
242                     connection.Open();
243                     return connection.GetSchema("TABLES");
244                 }
245                 catch (Exception) { throw; }
246             }
247         }
248         #endregion
249 
250         #region int ResetDataBass() 重置自動增加列,若是執行了刪除操做,自動增加列就會變的不連續,經過使用VACUUM方式重置
251         /// <summary>
252         /// 重置自動增加列,若是執行了刪除操做,自動增加列就會變的不連續,經過使用VACUUM方式重置
253         /// </summary>
254         public static int ResetDataBass()
255         {
256             using (SQLiteConnection conn = new SQLiteConnection(connectionString))
257             {
258                 using (SQLiteCommand command = new SQLiteCommand())
259                 {
260                     PrepareCommand(command, conn, "vacuum");
261 
262                     return command.ExecuteNonQuery();
263                 }
264             }
265         }
266         #endregion
267     }
相關文章
相關標籤/搜索