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 }