C#操作SQLite數(shù)據(jù)庫(kù)幫助類(lèi)詳解
本文實(shí)例講述了C#操作SQLite數(shù)據(jù)庫(kù)幫助類(lèi)。分享給大家供大家參考,具體如下:
最近有WPF做客戶(hù)端,需要離線操作存儲(chǔ)數(shù)據(jù),在項(xiàng)目中考慮使用Sqlite嵌入式數(shù)據(jù)庫(kù),在網(wǎng)上找了不少資料,最終整理出一個(gè)公共的幫助類(lèi)。
Sqlite是一個(gè)非常小巧的數(shù)據(jù)庫(kù),基本上具備關(guān)系型數(shù)據(jù)庫(kù)操作的大多數(shù)功能,Sql語(yǔ)法也大同小異。下面是我整理的幫助類(lèi)代碼:
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.查詢(xún),返回DataSet
/// <summary> /// 查詢(xún),返回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.查詢(xún),返回DataTable
/// <summary> /// 查詢(xún),返回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è)查詢(xún)
/// <summary> /// 分頁(yè)查詢(xún) /// </summary> /// <param name="recordCount">總記錄數(shù)</param> /// <param name="pageIndex">頁(yè)牽引</param> /// <param name="pageSize">頁(yè)大小</param> /// <param name="cmdText">Sql命令文本</param> /// <param name="countText">查詢(xún)總記錄數(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)容感興趣的讀者可查看本站專(zhuān)題:《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#中使用SQLite數(shù)據(jù)庫(kù)的方法介紹
- C#操作SQLite方法實(shí)例詳解
- C#簡(jiǎn)單訪問(wèn)SQLite數(shù)據(jù)庫(kù)的方法(安裝,連接,查詢(xún)等)
- C#操作SQLite數(shù)據(jù)庫(kù)方法小結(jié)(創(chuàng)建,連接,插入,查詢(xún),刪除等)
- C#操作SQLite數(shù)據(jù)庫(kù)之讀寫(xiě)數(shù)據(jù)庫(kù)的方法
- C#連接加密的Sqlite數(shù)據(jù)庫(kù)的方法
- C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查
- C#操作SQLite數(shù)據(jù)庫(kù)方法小結(jié)
- C#調(diào)用SQLite的詳細(xì)代碼舉例
相關(guān)文章
C# WinForm調(diào)用Shell_NotifyIcon的示例代碼
這篇文章主要介紹了C# WinForm調(diào)用Shell_NotifyIcon的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2020-11-11WPF設(shè)置窗體可以使用鼠標(biāo)拖動(dòng)大小的方法
這篇文章主要介紹了WPF設(shè)置窗體可以使用鼠標(biāo)拖動(dòng)大小的方法,涉及針對(duì)窗口的操作與設(shè)置技巧,具有很好的借鑒價(jià)值,需要的朋友可以參考下2014-11-11利用WCF雙工模式實(shí)現(xiàn)即時(shí)通訊
這篇文章主要介紹了利用WCF雙工模式實(shí)現(xiàn)即時(shí)通訊的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09C#中Task.ContinueWith連續(xù)任務(wù)使用實(shí)例
本文主要介紹了C#中Task.ContinueWith連續(xù)任務(wù)使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02C# WebApi+Webrtc局域網(wǎng)音視頻通話實(shí)例
這篇文章主要為大家詳細(xì)介紹了C# WebApi+Webrtc局域網(wǎng)音視頻通話實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了C#圖片上傳、保存、水印、縮略圖等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02