SQLite-介绍和使用

SQLite特点
(1)轻量级,跨平台的关系型数据库,所以支持视图,事务,触发器等。
(2)零配置-无需安装和管理配置,存储在单一磁盘文件中的完整的数据库
(3)数据库文件可共享,支持多种开发语言。
 
SQLite应用场景
适用于并发量低,访问需求高于写入操作的一些引用
例如,最近的项目里,在客户的文件服务器下,需要要建立文件路径的索引,并能够文件打包下载,考虑到不想装单独的数据库,于是乎便用了SQLite
 
SQLite使用
封装SQliteHelper类。
  1  public static class SqliteHelper
  2     {
  3         private static string connectionString =  ConfigurationManager.ConnectionStrings["SqliteConnectionstring"].ConnectionString;
  4          
  5         /// <summary>
  6         /// 创建一个数据库文件。如果存在同名数据库文件,则会覆盖。
  7         /// </summary>
  8         /// <param name="dbName">数据库文件名。为null或空串时不创建。</param>
  9         /// <param name="password">(可选)数据库密码,默认为空。</param>
 10         /// <exception cref="Exception"></exception>
 11         public static void CreateDB(string dbName)
 12         {
 13             SQLiteConnection conn = null;
 14             string dbPath = "Data Source ="+ connectionString+"/"+dbName + ".db";
 15             conn = new SQLiteConnection(dbPath);//创建数据库实例,指定文件位置  
 16             conn.Open();//打开数据库,若文件不存在会自动创建  
 17             string sql = "CREATE TABLE IF NOT EXISTS T_BuildChildPath(Id integer  IDENTITY(1,1), ProductsCode nvarchar(100), CodePath nvarchar(100), CreateTime  datetime);";//建表语句  
 18             SQLiteCommand cmdCreateTable = new SQLiteCommand(sql, conn);
 19             cmdCreateTable.ExecuteNonQuery();//如果表不存在,创建数据表  
 20             conn.Close();
 21         }
 22         /// <summary>
 23         /// 对SQLite数据库执行增删改操作,返回受影响的行数。
 24         /// </summary>
 25         /// <param name="sql">要执行的增删改的SQL语句。</param>
 26         /// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准。</param>
 27         /// <returns></returns>
 28         /// <exception cref="Exception"></exception>
 29         public static int ExecuteNonQuery(string sql, params SQLiteParameter[] parameters)
 30         {
 31             int affectedRows = 0;
 32             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
 33             {
 34                 using (SQLiteCommand command = new SQLiteCommand(connection))
 35                 {
 36                     try
 37                     {
 38                         connection.Open();
 39                         command.CommandText = sql;
 40                         
 41                         if (parameters.Length != 0)
 42                         {
 43                             command.Parameters.AddRange(parameters);
 44                         }
 45                         affectedRows = command.ExecuteNonQuery();
 46                     }
 47                     catch (Exception ex) { throw; }
 48                 }
 49             }
 50             return affectedRows;
 51         }
 52         public static int ExecuteNonQuery(string sql )
 53         {
 54             int affectedRows = 0;
 55             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
 56             {
 57                 using (SQLiteCommand command = new SQLiteCommand(connection))
 58                 {
 59                     try
 60                     {
 61                         connection.Open();
 62                         command.CommandText = sql;
 63                        
 64                         affectedRows = command.ExecuteNonQuery();
 65                     }
 66                     catch (Exception ex) { throw; }
 67                 }
 68             }
 69             return affectedRows;
 70         }
 71         /// <summary>
 72         /// 批量处理数据操作语句。
 73         /// </summary>
 74         /// <param name="list">SQL语句集合。</param>
 75         /// <exception cref="Exception"></exception>
 76         public static  void ExecuteNonQueryBatch(List<KeyValuePair<string,  SQLiteParameter[]>> list)
 77         {
 78             using (SQLiteConnection conn = new SQLiteConnection(connectionString))
 79             {
 80                 try { conn.Open(); }
 81                 catch { throw; }
 82                 using (SQLiteTransaction tran = conn.BeginTransaction())
 83                 {
 84                     using (SQLiteCommand cmd = new SQLiteCommand(conn))
 85                     {
 86                         try
 87                         {
 88                             foreach (var item in list)
 89                             {
 90                                 cmd.CommandText = item.Key;
 91                                 if (item.Value != null)
 92                                 {
 93                                     cmd.Parameters.AddRange(item.Value);
 94                                 }
 95                                 cmd.ExecuteNonQuery();
 96                             }
 97                             tran.Commit();
 98                         }
 99                         catch (Exception) { tran.Rollback(); throw; }
100                     }
101                 }
102             }
103         }
104         /// <summary>
105         /// 执行查询语句,并返回第一个结果。
106         /// </summary>
107         /// <param name="sql">查询语句。</param>
108         /// <returns>查询结果。</returns>
109         /// <exception cref="Exception"></exception>
110         public static object ExecuteScalar(string sql, params SQLiteParameter[]  parameters)
111         {
112             using (SQLiteConnection conn = new SQLiteConnection(connectionString))
113             {
114                 using (SQLiteCommand cmd = new SQLiteCommand(conn))
115                 {
116                     try
117                     {
118                         conn.Open();
119                         cmd.CommandText = sql;
120                         if (parameters.Length != 0)
121                         {
122                             cmd.Parameters.AddRange(parameters);
123                         }
124                         return cmd.ExecuteScalar();
125                     }
126                     catch (Exception) { throw; }
127                 }
128             }
129         }
130         public static bool ExecuteScalar(string sql )
131         {
132             using (SQLiteConnection conn = new SQLiteConnection(connectionString))
133             {
134                 using (SQLiteCommand cmd = new SQLiteCommand(conn))
135                 {
136                     try
137                     {
138                         conn.Open();
139                         cmd.CommandText = sql;
140                      
141                         return  (Convert.ToInt32(cmd.ExecuteScalar()?.ToString()??"0")>0)?true:false;
142                     }
143                     catch (Exception) { throw; }
144                 }
145             }
146         }
147         public static string ExecuteScalarStr(string sql)
148         {
149             using (SQLiteConnection conn = new SQLiteConnection(connectionString))
150             {
151                 using (SQLiteCommand cmd = new SQLiteCommand(conn))
152                 {
153                     try
154                     {
155                         conn.Open();
156                         cmd.CommandText = sql;
157                         return cmd.ExecuteScalar()?.ToString();
158                     }
159                     catch (Exception) { throw; }
160                 }
161             }
162         }
163         /// <summary>
164         /// 执行一个查询语句,返回一个包含查询结果的DataTable。
165         /// </summary>
166         /// <param name="sql">要执行的查询语句。</param>
167         /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准。</param>
168         /// <returns></returns>
169         /// <exception cref="Exception"></exception>
170         public static DataTable ExecuteQuery(string sql, params SQLiteParameter[]  parameters)
171         {
172             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
173             {
174                 using (SQLiteCommand command = new SQLiteCommand(sql, connection))
175                 {
176                     if (parameters.Length != 0)
177                     {
178                         command.Parameters.AddRange(parameters);
179                     }
180                     SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
181                     DataTable data = new DataTable();
182                     try { adapter.Fill(data); }
183                     catch (Exception) { throw; }
184                     return data;
185                 }
186             }
187         }
188         /// <summary>
189         /// 执行一个查询语句,返回一个关联的SQLiteDataReader实例。
190         /// </summary>
191         /// <param name="sql">要执行的查询语句。</param>
192         /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准。</param>
193         /// <returns></returns>
194         /// <exception cref="Exception"></exception>
195         public static SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[]  parameters)
196         {
197             SQLiteConnection connection = new SQLiteConnection(connectionString);
198             SQLiteCommand command = new SQLiteCommand(sql, connection);
199             try
200             {
201                 if (parameters.Length != 0)
202                 {
203                     command.Parameters.AddRange(parameters);
204                 }
205                 connection.Open();
206                 return command.ExecuteReader(CommandBehavior.CloseConnection);
207             }
208             catch (Exception) { throw; }
209         }
210         /// <summary>
211         /// 查询数据库中的所有数据类型信息。
212         /// </summary>
213         /// <returns></returns>
214         /// <exception cref="Exception"></exception>
215         public static DataTable GetSchema()
216         {
217             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
218             {
219                 try
220                 {
221                     connection.Open();
222                     return connection.GetSchema("TABLES");
223                 }
224                 catch (Exception) { throw; }
225             }
226         }
227     }

这里的SqliteConnectionstring连接字符串和SQL类似,Data Source改成对应的物理路径即可。

  <add name="SqliteConnectionstring" connectionString="Data  Source=D:/ProductsIndex.db"  providerName="System.Data.SqlClient" />

页面的调用:

string sql = string.Format(@" select * from T_BuildChildPath where ProductsCode like '%"  + PartCode + "%'");
DataView dv = SqliteHelper.ExecuteQuery(sql).DefaultView;

 

posted @ 2019-08-11 21:16  y_w_k  阅读(465)  评论(0编辑  收藏  举报