C#操作SQLite数据库帮助类详解
本文实例讲述了C#操作SQLite数据库帮助类。分享给大家供大家参考,具体如下:
最近有WPF做客户端,需要离线操作存储数据,在项目中考虑使用Sqlite嵌入式数据库,在网上找了不少资料,最终整理出一个公共的帮助类。
Sqlite是一个非常小巧的数据库,基本上具备关系型数据库操作的大多数功能,Sql语法也大同小异。下面是我整理的帮助类代码:
1.获取SQLiteConnection对象,传入数据库有地址即可。
//////获得连接对象 /// ///SQLiteConnection publicstaticSQLiteConnectionGetSQLiteConnection() { //Sqlite数据库地址 stringstr=AppDomain.CurrentDomain.BaseDirectory; varcon=newSQLiteConnection("DataSource="+str+"DataBass\\InfoServiceDbB.db"); returncon; }
2.准备操作命令参数,构造SQLiteCommand对象:
//////准备操作命令参数 /// ///SQLiteCommand /// SQLiteConnection /// Sql命令文本 /// 参数数组 privatestaticvoidPrepareCommand(SQLiteCommandcmd,SQLiteConnectionconn,stringcmdText,Dictionary data) { if(conn.State!=ConnectionState.Open) conn.Open(); cmd.Parameters.Clear(); cmd.Connection=conn; cmd.CommandText=cmdText; cmd.CommandType=CommandType.Text; cmd.CommandTimeout=30; if(data!=null&&data.Count>=1) { foreach(KeyValuePair valindata) { cmd.Parameters.AddWithValue(val.Key,val.Value); } } }
3.查询,返回DataSet
//////查询,返回DataSet /// ///Sql命令文本 /// 参数数组 /// DataSet publicstaticDataSetExecuteDataset(stringcmdText,Dictionarydata) { vards=newDataSet(); using(SQLiteConnectionconnection=GetSQLiteConnection()) { varcommand=newSQLiteCommand(); PrepareCommand(command,connection,cmdText,data); varda=newSQLiteDataAdapter(command); da.Fill(ds); } returnds; }
4.查询,返回DataTable
//////查询,返回DataTable /// ///Sql命令文本 /// 参数数组 /// DataTable publicstaticDataTableExecuteDataTable(stringcmdText,Dictionarydata) { vardt=newDataTable(); using(SQLiteConnectionconnection=GetSQLiteConnection()) { varcommand=newSQLiteCommand(); PrepareCommand(command,connection,cmdText,data); SQLiteDataReaderreader=command.ExecuteReader(); dt.Load(reader); } returndt; }
5.返回一行数据DataRow
//////返回一行数据 /// ///Sql命令文本 /// 参数数组 /// DataRow publicstaticDataRowExecuteDataRow(stringcmdText,Dictionarydata) { DataSetds=ExecuteDataset(cmdText,data); if(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0) returnds.Tables[0].Rows[0]; returnnull; }
6.执行数据库操作
//////执行数据库操作 /// ///Sql命令文本 /// 传入的参数 /// 返回受影响的行数 publicstaticintExecuteNonQuery(stringcmdText,Dictionarydata) { using(SQLiteConnectionconnection=GetSQLiteConnection()) { varcommand=newSQLiteCommand(); PrepareCommand(command,connection,cmdText,data); returncommand.ExecuteNonQuery(); } }
7.返回SqlDataReader对象
//////返回SqlDataReader对象 /// ///Sql命令文本 /// 传入的参数 /// SQLiteDataReader publicstaticSQLiteDataReaderExecuteReader(stringcmdText,Dictionarydata) { varcommand=newSQLiteCommand(); SQLiteConnectionconnection=GetSQLiteConnection(); try { PrepareCommand(command,connection,cmdText,data); SQLiteDataReaderreader=command.ExecuteReader(CommandBehavior.CloseConnection); returnreader; } catch { connection.Close(); command.Dispose(); throw; } }
8.返回结果集中的第一行第一列,忽略其他行或列
//////返回结果集中的第一行第一列,忽略其他行或列 /// ///Sql命令文本 /// 传入的参数 /// object publicstaticobjectExecuteScalar(stringcmdText,Dictionarydata) { using(SQLiteConnectionconnection=GetSQLiteConnection()) { varcmd=newSQLiteCommand(); PrepareCommand(cmd,connection,cmdText,data); returncmd.ExecuteScalar(); } }
9.分页查询
//////分页查询 /// ///总记录数 /// 页牵引 /// 页大小 /// Sql命令文本 /// 查询总记录数的Sql文本 /// 命令参数 /// DataSet publicstaticDataSetExecutePager(refintrecordCount,intpageIndex,intpageSize,stringcmdText,stringcountText,Dictionarydata) { if(recordCount<0) recordCount=int.Parse(ExecuteScalar(countText,data).ToString()); vards=newDataSet(); using(SQLiteConnectionconnection=GetSQLiteConnection()) { varcommand=newSQLiteCommand(); PrepareCommand(command,connection,cmdText,data); varda=newSQLiteDataAdapter(command); da.Fill(ds,(pageIndex-1)*pageSize,pageSize,"result"); } returnds; }
10.重新组织数据库
当你从SQLite数据库中删除数据时,未用的磁盘空间将会加入一个内部的“自由列表”中。
当你下次插入数据时,这部分空间可以重用。磁盘空间不会丢失,但也不会返还给操作系统。
如果删除了大量数据,而又想缩小数据库文件占用的空间,执行VACUUM命令。VACUUM将会从头重新组织数据库
你可以在你的程序中约定一个时间间隔执行一次重新组织数据库的操作,节约空间
publicvoidResetDataBass() { using(SQLiteConnectionconn=GetSQLiteConnection()) { varcmd=newSQLiteCommand(); if(conn.State!=ConnectionState.Open) conn.Open(); cmd.Parameters.Clear(); cmd.Connection=conn; cmd.CommandText="vacuum"; cmd.CommandType=CommandType.Text; cmd.CommandTimeout=30; cmd.ExecuteNonQuery(); } }
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见数据库操作技巧汇总》、《C#常见控件用法教程》、《C#窗体操作技巧汇总》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。