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í), 未用的磁盤空間將會(huì)加入一個(gè)內(nèi)部的“自由列表”中。
當(dāng)你下次插入數(shù)據(jù)時(shí),這部分空間可以重用。磁盤空間不會(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#常見數(shù)據(jù)庫(kù)操作技巧匯總》、《C#常見控件用法教程》、《C#窗體操作技巧匯總》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》及《C#程序設(shè)計(jì)之線程使用技巧總結(jié)》
希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。
- C#中使用SQLite數(shù)據(jù)庫(kù)的方法介紹
- C#操作SQLite數(shù)據(jù)庫(kù)方法小結(jié)(創(chuàng)建,連接,插入,查詢,刪除等)
- C#簡(jiǎn)單訪問SQLite數(shù)據(jù)庫(kù)的方法(安裝,連接,查詢等)
- C#操作SQLite數(shù)據(jù)庫(kù)之讀寫數(shù)據(jù)庫(kù)的方法
- C#連接加密的Sqlite數(shù)據(jù)庫(kù)的方法
- C#操作SQLite數(shù)據(jù)庫(kù)方法小結(jié)
- C# SQLite數(shù)據(jù)庫(kù)入門使用說明
- C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
- C#?Sqlite數(shù)據(jù)庫(kù)的搭建及使用技巧
- C#項(xiàng)目中添加本地?cái)?shù)據(jù)庫(kù)SQLite的干貨教程
相關(guān)文章
C#創(chuàng)建磁性窗體的實(shí)現(xiàn)方法
經(jīng)常會(huì)遇到一種情況,即當(dāng)拖動(dòng)一個(gè)窗體(主窗體)時(shí),其他窗體(子窗體)隨著該窗體移動(dòng),當(dāng)拖動(dòng)子窗體時(shí),其他窗體將不跟隨移動(dòng),這就是磁性窗體,所以本文給大家介紹了C#創(chuàng)建磁性窗體的實(shí)現(xiàn)方法,需要的朋友可以參考下2024-04-04
C#實(shí)現(xiàn)六大設(shè)計(jì)原則之迪米特法則
這篇文章介紹了C#實(shí)現(xiàn)六大設(shè)計(jì)原則之迪米特法則的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
C#實(shí)現(xiàn)Winform版計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)Winform版計(jì)算器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
C#實(shí)現(xiàn)Ruby的負(fù)數(shù)索引器
這篇文章主要介紹了C#實(shí)現(xiàn)Ruby的負(fù)數(shù)索引器的相關(guān)代碼和使用方法,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2016-07-07
C# foreach 循環(huán)中獲取索引的實(shí)現(xiàn)方式
這篇文章主要介紹了C# foreach 循環(huán)中獲取索引的實(shí)現(xiàn)方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-04-04
實(shí)例解析C#設(shè)計(jì)模式編程中簡(jiǎn)單工廠模式的使用
這篇文章主要介紹了C#設(shè)計(jì)模式編程中簡(jiǎn)單工廠模式的使用,文中也舉了在.NET框架下簡(jiǎn)單工廠模式的實(shí)現(xiàn)例子,需要的朋友可以參考下2016-02-02

