C#操作SQLite數(shù)據(jù)庫(kù)幫助類詳解
本文實(shí)例講述了C#操作SQLite數(shù)據(jù)庫(kù)幫助類。分享給大家供大家參考,具體如下:
最近有WPF做客戶端,需要離線操作存儲(chǔ)數(shù)據(jù),在項(xiàng)目中考慮使用Sqlite嵌入式數(shù)據(jù)庫(kù),在網(wǎng)上找了不少資料,最終整理出一個(gè)公共的幫助類。
Sqlite是一個(gè)非常小巧的數(shù)據(jù)庫(kù),基本上具備關(guān)系型數(shù)據(jù)庫(kù)操作的大多數(shù)功能,Sql語(yǔ)法也大同小異。下面是我整理的幫助類代碼:
1.獲取 SQLiteConnection 對(duì)象,傳入數(shù)據(jù)庫(kù)有地址即可。
/// <summary> /// 獲得連接對(duì)象 /// </summary> /// <returns>SQLiteConnection</returns> public static SQLiteConnection GetSQLiteConnection() { //Sqlite數(shù)據(jù)庫(kù)地址 string str = AppDomain.CurrentDomain.BaseDirectory; var con = new SQLiteConnection("Data Source=" + str + "DataBass\\InfoServiceDbB.db"); return con; }
2.準(zhǔn)備操作命令參數(shù),構(gòu)造SQLiteCommand 對(duì)象:
/// <summary> /// 準(zhǔn)備操作命令參數(shù) /// </summary> /// <param name="cmd">SQLiteCommand</param> /// <param name="conn">SQLiteConnection</param> /// <param name="cmdText">Sql命令文本</param> /// <param name="data">參數(shù)數(shù)組</param> private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, Dictionary<String, String> 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<String, String> val in data) { cmd.Parameters.AddWithValue(val.Key, val.Value); } } }
3.查詢,返回DataSet
/// <summary> /// 查詢,返回DataSet /// </summary> /// <param name="cmdText">Sql命令文本</param> /// <param name="data">參數(shù)數(shù)組</param> /// <returns>DataSet</returns> public static DataSet ExecuteDataset(string cmdText, Dictionary<string, string> data) { var ds = new DataSet(); using (SQLiteConnection connection = GetSQLiteConnection()) { var command = new SQLiteCommand(); PrepareCommand(command, connection, cmdText, data); var da = new SQLiteDataAdapter(command); da.Fill(ds); } return ds; }
4.查詢,返回DataTable
/// <summary> /// 查詢,返回DataTable /// </summary> /// <param name="cmdText">Sql命令文本</param> /// <param name="data">參數(shù)數(shù)組</param> /// <returns>DataTable</returns> public static DataTable ExecuteDataTable(string cmdText, Dictionary<string, string> data) { var dt = new DataTable(); using (SQLiteConnection connection = GetSQLiteConnection()) { var command = new SQLiteCommand(); PrepareCommand(command, connection, cmdText, data); SQLiteDataReader reader = command.ExecuteReader(); dt.Load(reader); } return dt; }
5.返回一行數(shù)據(jù) DataRow
/// <summary> /// 返回一行數(shù)據(jù) /// </summary> /// <param name="cmdText">Sql命令文本</param> /// <param name="data">參數(shù)數(shù)組</param> /// <returns>DataRow</returns> public static DataRow ExecuteDataRow(string cmdText, Dictionary<string, string> data) { DataSet ds = ExecuteDataset(cmdText, data); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return ds.Tables[0].Rows[0]; return null; }
6.執(zhí)行數(shù)據(jù)庫(kù)操作
/// <summary> /// 執(zhí)行數(shù)據(jù)庫(kù)操作 /// </summary> /// <param name="cmdText">Sql命令文本</param> /// <param name="data">傳入的參數(shù)</param> /// <returns>返回受影響的行數(shù)</returns> public static int ExecuteNonQuery(string cmdText, Dictionary<string, string> data) { using (SQLiteConnection connection = GetSQLiteConnection()) { var command = new SQLiteCommand(); PrepareCommand(command, connection, cmdText, data); return command.ExecuteNonQuery(); } }
7.返回SqlDataReader對(duì)象
/// <summary> /// 返回SqlDataReader對(duì)象 /// </summary> /// <param name="cmdText">Sql命令文本</param> /// <param name="data">傳入的參數(shù)</param> /// <returns>SQLiteDataReader</returns> public static SQLiteDataReader ExecuteReader(string cmdText, Dictionary<string, string> data) { var command = new SQLiteCommand(); SQLiteConnection connection = GetSQLiteConnection(); try { PrepareCommand(command, connection, cmdText, data); SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection); return reader; } catch { connection.Close(); command.Dispose(); throw; } }
8.返回結(jié)果集中的第一行第一列,忽略其他行或列
/// <summary> /// 返回結(jié)果集中的第一行第一列,忽略其他行或列 /// </summary> /// <param name="cmdText">Sql命令文本</param> /// <param name="data">傳入的參數(shù)</param> /// <returns>object</returns> public static object ExecuteScalar(string cmdText, Dictionary<string, string> data) { using (SQLiteConnection connection = GetSQLiteConnection()) { var cmd = new SQLiteCommand(); PrepareCommand(cmd, connection, cmdText, data); return cmd.ExecuteScalar(); } }
9.分頁(yè)查詢
/// <summary> /// 分頁(yè)查詢 /// </summary> /// <param name="recordCount">總記錄數(shù)</param> /// <param name="pageIndex">頁(yè)牽引</param> /// <param name="pageSize">頁(yè)大小</param> /// <param name="cmdText">Sql命令文本</param> /// <param name="countText">查詢總記錄數(shù)的Sql文本</param> /// <param name="data">命令參數(shù)</param> /// <returns>DataSet</returns> public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, Dictionary<string, string> data) { if (recordCount < 0) recordCount = int.Parse(ExecuteScalar(countText, data).ToString()); var ds = new DataSet(); using (SQLiteConnection connection = GetSQLiteConnection()) { var command = new SQLiteCommand(); PrepareCommand(command, connection, cmdText, data); var da = new SQLiteDataAdapter(command); da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result"); } return ds; }
10.重新組織數(shù)據(jù)庫(kù)
當(dāng)你從SQLite數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)時(shí), 未用的磁盤(pán)空間將會(huì)加入一個(gè)內(nèi)部的“自由列表”中。
當(dāng)你下次插入數(shù)據(jù)時(shí),這部分空間可以重用。磁盤(pán)空間不會(huì)丟失, 但也不會(huì)返還給操作系統(tǒng)。
如果刪除了大量數(shù)據(jù),而又想縮小數(shù)據(jù)庫(kù)文件占用的空間,執(zhí)行 VACUUM 命令。 VACUUM 將會(huì)從頭重新組織數(shù)據(jù)庫(kù)
你可以在你的程序中約定一個(gè)時(shí)間間隔執(zhí)行一次重新組織數(shù)據(jù)庫(kù)的操作,節(jié)約空間
public void ResetDataBass() { using (SQLiteConnection conn = GetSQLiteConnection()) { var cmd = new SQLiteCommand(); 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(); } }
更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》、《C#常見(jiàn)控件用法教程》、《C#窗體操作技巧匯總》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》及《C#程序設(shè)計(jì)之線程使用技巧總結(jié)》
希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。
上一篇:C#實(shí)現(xiàn)將Doc文檔轉(zhuǎn)換成rtf格式的方法示例
欄 目:C#教程
下一篇:C#使用dir命令實(shí)現(xiàn)文件搜索功能示例
本文標(biāo)題:C#操作SQLite數(shù)據(jù)庫(kù)幫助類詳解
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5587.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)判斷當(dāng)前操作用戶管理角色的方法
- 01-10C#中DataGridView常用操作實(shí)例小結(jié)
- 01-10C#操作ftp類完整實(shí)例
- 01-10asp.net中XML如何做增刪改查操作
- 01-10C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫(kù)及密碼的方法
- 01-10C#使用ADO.Net部件來(lái)訪問(wèn)Access數(shù)據(jù)庫(kù)的方法
- 01-10C#路徑,文件,目錄及IO常見(jiàn)操作匯總
- 01-10C#將圖片存放到SQL SERVER數(shù)據(jù)庫(kù)中的方法
- 01-10C#操作IIS方法集合


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子