sqlite-net-pcl-C#版_安裝與使用教
阿新 • • 發佈:2022-12-11
一、安裝:
1、引用NuGet包:
“sqlite-net-pcl”與“SQLitePCLRaw.bundle_green”NuGet包。
2、sqlite-net-pcl的“資料庫連線類”與“資料庫配置檔案”
① Sqilte幫助類-單例:
Sqilte幫助類-單例
/** *┌──────────────────────────────────────────────────────────────┐ *│ 描 述:Sqilte幫助類-單例 *│ 作 者:執筆小白 *│ 版 本:1.0 *│ 建立時間:2022-11-20 15:40:56 *└──────────────────────────────────────────────────────────────┘ *┌──────────────────────────────────────────────────────────────┐ *│ 名稱空間: Repository._Base *│ 類 名:SQLiteDBBase(PracticeContext) *└──────────────────────────────────────────────────────────────┘ */ using SQLite; using System.Diagnostics; namespace Repository._Base { /// <summary> /// MAUI的Sqilte幫助類 /// </summary> public class SQLiteDBBase { /// <summary> /// 資料庫連線操作物件 /// </summary> internal static SQLiteAsyncConnection _SQLiteDBConnection; public SQLiteDBBase() { } /// <summary> /// 初始化連線 /// </summary> public void Init() { if(SQLiteDBBase._SQLiteDBConnection is null) { SQLiteDBBase._SQLiteDBConnection = new SQLiteAsyncConnection(SQLiteDBConfg.DatabasePath, SQLiteDBConfg.Flags); } //var result = await Database.CreateTableAsync<TodoItem>(); } /// <summary> /// 獲取SQLite資料庫檔案路徑 /// </summary> /// <returns></returns> public string GetDatabaseFilePath() { return SQLiteDBBase._SQLiteDBConnection.DatabasePath; } /// <summary> /// 獲取SQLite的Lib版本 /// </summary> /// <returns></returns> public int GetLibVersionNumber() { return SQLiteDBBase._SQLiteDBConnection.LibVersionNumber; } /// <summary> /// 獲取SQLite的DateTimeString格式 /// </summary> /// <returns></returns> public string GetDateTimeStringFormat() { Debug.WriteLine(SQLiteDBBase._SQLiteDBConnection.DateTimeStringFormat); return SQLiteDBBase._SQLiteDBConnection.DateTimeStringFormat; } /// <summary> /// 獲取SQLite的TableMappings /// </summary> /// <returns></returns> public List<TableMapping> GetTableMappings() { return SQLiteDBBase._SQLiteDBConnection.TableMappings.ToList(); } } }
② SQLite配置資料:
SQLite配置資料
/** *┌──────────────────────────────────────────────────────────────┐ *│ 描 述:SQLite配置資料 *│ 作 者:執筆小白 *│ 版 本:1.0 *│ 建立時間:2022-11-20 15:40:56 *└──────────────────────────────────────────────────────────────┘ *┌──────────────────────────────────────────────────────────────┐ *│ 名稱空間: Repository._Base *│ 類 名:SQLiteDBConfg *└──────────────────────────────────────────────────────────────┘ */ using SQLite; using System.Diagnostics; namespace Repository._Base { /// <summary> /// SQLite配置資料 /// </summary> internal class SQLiteDBConfg { /// <summary> /// SQLite檔名 /// </summary> private const string DatabaseFilename = "MengFeiYue.db3"; /// <summary> /// SQLite路徑 /// </summary> internal static string DatabasePath => Path.Combine(FileSystem.AppDataDirectory, DatabaseFilename); /// <summary> /// SQLite連線配置 /// </summary> internal static readonly SQLite.SQLiteOpenFlags Flags = SQLite.SQLiteOpenFlags.Create | // 如果連線不存在,連線將自動建立資料庫檔案 SQLite.SQLiteOpenFlags.ReadWrite | // 連線可以讀取和寫入資料。 //SQLite.SQLiteOpenFlags.FullMutex | // 連線在序列化執行緒模式下開啟。 SQLite.SQLiteOpenFlags.NoMutex | // 連線在多執行緒模式下開啟。 SQLite.SQLiteOpenFlags.SharedCache | // 如果連線已啟用,則連線將參與共享快取。 //SQLite.SQLiteOpenFlags.PrivateCache | // 即使連線已啟用,連線也不會參與共享快取。 SQLite.SQLiteOpenFlags.ProtectionNone // 資料庫檔案未加密。 //SQLite.SQLiteOpenFlags.ProtectionComplete // 裝置鎖定時,檔案已加密且不可訪問。 //SQLite.SQLiteOpenFlags.ProtectionCompleteUntilFirstUserAuthentication // 檔案已加密,直到使用者啟動並解鎖裝置。 //SQLite.SQLiteOpenFlags.ProtectionCompleteUnlessOpen // 檔案已加密,直到它開啟,但即使使用者鎖定裝置,也可以訪問該檔案。 ; } }
二、sqlite-net-pcl使用教程:
1、sqlite-net-pcl特徵講解
SQLite實體示例
/** *┌──────────────────────────────────────────────────────────────┐ *│ 描 述:SQLite實體示例 *│ 作 者:執筆小白 *│ 版 本:1.0 *│ 建立時間:2022-11-20 15:40:56 *└──────────────────────────────────────────────────────────────┘ *┌──────────────────────────────────────────────────────────────┐ *│ 名稱空間: Model.Test *│ 類 名:TableTest *└──────────────────────────────────────────────────────────────┘ */ using SQLite; namespace Model.Test { /// <summary> /// 測試表 /// </summary> public class TableTest { public TableTest() { } /// <summary> /// 主鍵,自增 /// </summary> [PrimaryKey, AutoIncrement] public int Id { get; set; } /// <summary> /// 索引 /// </summary> [Indexed] public string Name { get; set; } public string Pwd { get; set; } public string Description { get; set; } } }
2、增刪改查等常見示例
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:SQLite資料操作示例
*│ 作 者:執筆小白
*│ 版 本:1.0
*│ 建立時間:2022-11-20 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 名稱空間: Repository._Base
*│ 類 名:SQLiteDBDemo
*└──────────────────────────────────────────────────────────────┘
*/
using Model.Test;
using SQLite;
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Repository._Base
{
/// <summary>
/// SQLite資料操作示例
/// </summary>
public class SQLiteDBDemo:SQLiteDBBase
{
#region 新增表資料
/// <summary>
/// 新增資料
/// </summary>
/// <param name="tableTest">資料</param>
/// <returns></returns>
public int InsertTableDataDemo(TableTest tableTest)
{
return _SQLiteDBConnection.InsertAsync(tableTest).Result;
}
/// <summary>
/// 新增多條表資料
/// </summary>
/// <param name="tableTests">資料</param>
/// <param name="runInTransaction">是否使用事務</param>
/// <returns></returns>
public int InsertTableDatasDemo(List<TableTest> tableTests, bool runInTransaction = true)
{
return _SQLiteDBConnection.InsertAllAsync(tableTests, runInTransaction).Result;
}
#endregion 新增表資料
#region 刪除表資料
/// <summary>
/// 刪除資料
/// </summary>
/// <param name="tableTest"></param>
/// <returns></returns>
public int DeleteTableDataDemo(TableTest tableTest)
{
return _SQLiteDBConnection.DeleteAsync(tableTest).Result;
}
#endregion 刪除表資料
#region 修改表資料
/// <summary>
/// 更新資料
/// </summary>
/// <param name="tableTest">資料</param>
/// <returns></returns>
public int UpdateTableDataDemo(TableTest tableTest)
{
return _SQLiteDBConnection.UpdateAsync(tableTest).Result;
}
/// <summary>
/// 更新所有的表資料
/// </summary>
/// <param name="tableTests">資料</param>
/// <param name="runInTransaction">是否使用事務</param>
/// <returns></returns>
public int UpdateAllTableDataDemo(List<TableTest> tableTests,bool runInTransaction = true)
{
return _SQLiteDBConnection.UpdateAllAsync(tableTests, runInTransaction).Result;
}
#endregion 修改表資料
#region 查詢表資料
/// <summary>
/// 查詢
/// </summary>
/// <param name="tableTest">條件</param>
/// <returns></returns>
public List<TableTest> QueryTableDataByWhere(TableTest tableTest)
{
return _SQLiteDBConnection.QueryAsync<TableTest>("select * from TableTest where Name=? and Pwd=?", tableTest.Name, tableTest.Pwd).Result;
}
/// <summary>
/// 通過Id獲取一條資料
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public TableTest GetTableDataById(int id)
{
return _SQLiteDBConnection.QueryAsync<TableTest>("select * from TableTest where Id=?", id).Result.FirstOrDefault();
}
/// <summary>
/// 查詢全部的資料
/// 返回一個可供查詢的表,後篩選
/// </summary>
/// <param name="tableTest">條件</param>
/// <returns></returns>
public List<TableTest> GetTableDataByWhere(TableTest tableTest=null)
{
if (tableTest !=null)
{
return _SQLiteDBConnection.Table<TableTest>().Where(t => t.Name == tableTest.Name).ToListAsync().Result;
}
else
{
return _SQLiteDBConnection.Table<TableTest>().ToListAsync().Result;
}
}
#endregion 查詢表資料
#region 事務
// 執行事務
public void RunInTransactionAsync()
{
// 操作
TableTest insertObj = new();
TableTest updateObj = new();
TableTest deleteObj = new();
_SQLiteDBConnection.RunInTransactionAsync(tran =>
{
// database calls inside the transaction
tran.Insert(insertObj);
tran.Update(updateObj);
tran.Delete(deleteObj);
});
}
#endregion 事務
#region 建立表
/// <summary>
/// 建立表
/// </summary>
public void CtreatTableDemo()
{
_SQLiteDBConnection.CreateTableAsync<TableTest>();
}
#endregion 建立表
#region 刪除表
/// <summary>
/// 刪除表
/// </summary>
public void DropTableDemo()
{
_SQLiteDBConnection.DropTableAsync<TableTest>();
}
#endregion 刪除表
#region 新增列或修改列、刪除列結構;新增、刪除索引
/// <summary>
/// 新增列或修改列結構
/// </summary>
public void ModifyColumnsForTableDemo()
{
_SQLiteDBConnection.CreateTableAsync<TableTest>();
}
#endregion 新增列或修改列、刪除列結構;
#region 新增、刪除索引(可以用特徵指定)
/// <summary>
/// 建立索引
/// </summary>
public int CreateIndexAsync()
{
TableTest tableTest = new();
string indexName = "TTName_Index"; // 索引名
bool unique = false; // 是否唯一索引
//return _SQLiteDBConnection.CreateIndexAsync(nameof(TableTest), nameof(tableTest.Name), unique).Result; // 單個列索引
return _SQLiteDBConnection.CreateIndexAsync(indexName, nameof(TableTest), nameof(tableTest.Name), unique).Result; // 單個列索引_指定索引名
//return _SQLiteDBConnection.CreateIndexAsync(nameof(TableTest),new string[] { nameof(tableTest.Name), nameof(tableTest.Pwd), nameof(tableTest.Description) }, unique).Result; // 多個列索引
}
#endregion 新增、刪除索引(可以用特徵指定)
}
}
一、安裝:
1、引用NuGet包:
“sqlite-net-pcl”與“SQLitePCLRaw.bundle_green”NuGet包。
2、sqlite-net-pcl的“資料庫連線類”與“資料庫配置檔案”
① Sqilte幫助類-單例:
Sqilte幫助類-單例
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:Sqilte幫助類-單例
*│ 作 者:執筆小白
*│ 版 本:1.0
*│ 建立時間:2022-11-20 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 名稱空間: Repository._Base
*│ 類 名:SQLiteDBBase(PracticeContext)
*└──────────────────────────────────────────────────────────────┘
*/
using SQLite;
using System.Diagnostics;
namespace Repository._Base
{
/// <summary>
/// MAUI的Sqilte幫助類
/// </summary>
public class SQLiteDBBase
{
/// <summary>
/// 資料庫連線操作物件
/// </summary>
internal static SQLiteAsyncConnection _SQLiteDBConnection;
public SQLiteDBBase()
{
}
/// <summary>
/// 初始化連線
/// </summary>
public void Init()
{
if(SQLiteDBBase._SQLiteDBConnection is null)
{
SQLiteDBBase._SQLiteDBConnection = new SQLiteAsyncConnection(SQLiteDBConfg.DatabasePath, SQLiteDBConfg.Flags);
}
//var result = await Database.CreateTableAsync<TodoItem>();
}
/// <summary>
/// 獲取SQLite資料庫檔案路徑
/// </summary>
/// <returns></returns>
public string GetDatabaseFilePath()
{
return SQLiteDBBase._SQLiteDBConnection.DatabasePath;
}
/// <summary>
/// 獲取SQLite的Lib版本
/// </summary>
/// <returns></returns>
public int GetLibVersionNumber()
{
return SQLiteDBBase._SQLiteDBConnection.LibVersionNumber;
}
/// <summary>
/// 獲取SQLite的DateTimeString格式
/// </summary>
/// <returns></returns>
public string GetDateTimeStringFormat()
{
Debug.WriteLine(SQLiteDBBase._SQLiteDBConnection.DateTimeStringFormat);
return SQLiteDBBase._SQLiteDBConnection.DateTimeStringFormat;
}
/// <summary>
/// 獲取SQLite的TableMappings
/// </summary>
/// <returns></returns>
public List<TableMapping> GetTableMappings()
{
return SQLiteDBBase._SQLiteDBConnection.TableMappings.ToList();
}
}
}
② SQLite配置資料:
SQLite配置資料
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:SQLite配置資料
*│ 作 者:執筆小白
*│ 版 本:1.0
*│ 建立時間:2022-11-20 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 名稱空間: Repository._Base
*│ 類 名:SQLiteDBConfg
*└──────────────────────────────────────────────────────────────┘
*/
using SQLite;
using System.Diagnostics;
namespace Repository._Base
{
/// <summary>
/// SQLite配置資料
/// </summary>
internal class SQLiteDBConfg
{
/// <summary>
/// SQLite檔名
/// </summary>
private const string DatabaseFilename = "MengFeiYue.db3";
/// <summary>
/// SQLite路徑
/// </summary>
internal static string DatabasePath => Path.Combine(FileSystem.AppDataDirectory, DatabaseFilename);
/// <summary>
/// SQLite連線配置
/// </summary>
internal static readonly SQLite.SQLiteOpenFlags Flags =
SQLite.SQLiteOpenFlags.Create | // 如果連線不存在,連線將自動建立資料庫檔案
SQLite.SQLiteOpenFlags.ReadWrite | // 連線可以讀取和寫入資料。
//SQLite.SQLiteOpenFlags.FullMutex | // 連線在序列化執行緒模式下開啟。
SQLite.SQLiteOpenFlags.NoMutex | // 連線在多執行緒模式下開啟。
SQLite.SQLiteOpenFlags.SharedCache | // 如果連線已啟用,則連線將參與共享快取。
//SQLite.SQLiteOpenFlags.PrivateCache | // 即使連線已啟用,連線也不會參與共享快取。
SQLite.SQLiteOpenFlags.ProtectionNone // 資料庫檔案未加密。
//SQLite.SQLiteOpenFlags.ProtectionComplete // 裝置鎖定時,檔案已加密且不可訪問。
//SQLite.SQLiteOpenFlags.ProtectionCompleteUntilFirstUserAuthentication // 檔案已加密,直到使用者啟動並解鎖裝置。
//SQLite.SQLiteOpenFlags.ProtectionCompleteUnlessOpen // 檔案已加密,直到它開啟,但即使使用者鎖定裝置,也可以訪問該檔案。
;
}
}
二、sqlite-net-pcl使用教程:
1、sqlite-net-pcl特徵講解
SQLite實體示例
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:SQLite實體示例
*│ 作 者:執筆小白
*│ 版 本:1.0
*│ 建立時間:2022-11-20 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 名稱空間: Model.Test
*│ 類 名:TableTest
*└──────────────────────────────────────────────────────────────┘
*/
using SQLite;
namespace Model.Test
{
/// <summary>
/// 測試表
/// </summary>
public class TableTest
{
public TableTest() { }
/// <summary>
/// 主鍵,自增
/// </summary>
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
/// <summary>
/// 索引
/// </summary>
[Indexed]
public string Name { get; set; }
public string Pwd { get; set; }
public string Description { get; set; }
}
}
2、增刪改查等常見示例
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:SQLite資料操作示例
*│ 作 者:執筆小白
*│ 版 本:1.0
*│ 建立時間:2022-11-20 15:40:56
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 名稱空間: Repository._Base
*│ 類 名:SQLiteDBDemo
*└──────────────────────────────────────────────────────────────┘
*/
using Model.Test;
using SQLite;
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Repository._Base
{
/// <summary>
/// SQLite資料操作示例
/// </summary>
public class SQLiteDBDemo:SQLiteDBBase
{
#region 新增表資料
/// <summary>
/// 新增資料
/// </summary>
/// <param name="tableTest">資料</param>
/// <returns></returns>
public int InsertTableDataDemo(TableTest tableTest)
{
return _SQLiteDBConnection.InsertAsync(tableTest).Result;
}
/// <summary>
/// 新增多條表資料
/// </summary>
/// <param name="tableTests">資料</param>
/// <param name="runInTransaction">是否使用事務</param>
/// <returns></returns>
public int InsertTableDatasDemo(List<TableTest> tableTests, bool runInTransaction = true)
{
return _SQLiteDBConnection.InsertAllAsync(tableTests, runInTransaction).Result;
}
#endregion 新增表資料
#region 刪除表資料
/// <summary>
/// 刪除資料
/// </summary>
/// <param name="tableTest"></param>
/// <returns></returns>
public int DeleteTableDataDemo(TableTest tableTest)
{
return _SQLiteDBConnection.DeleteAsync(tableTest).Result;
}
#endregion 刪除表資料
#region 修改表資料
/// <summary>
/// 更新資料
/// </summary>
/// <param name="tableTest">資料</param>
/// <returns></returns>
public int UpdateTableDataDemo(TableTest tableTest)
{
return _SQLiteDBConnection.UpdateAsync(tableTest).Result;
}
/// <summary>
/// 更新所有的表資料
/// </summary>
/// <param name="tableTests">資料</param>
/// <param name="runInTransaction">是否使用事務</param>
/// <returns></returns>
public int UpdateAllTableDataDemo(List<TableTest> tableTests,bool runInTransaction = true)
{
return _SQLiteDBConnection.UpdateAllAsync(tableTests, runInTransaction).Result;
}
#endregion 修改表資料
#region 查詢表資料
/// <summary>
/// 查詢
/// </summary>
/// <param name="tableTest">條件</param>
/// <returns></returns>
public List<TableTest> QueryTableDataByWhere(TableTest tableTest)
{
return _SQLiteDBConnection.QueryAsync<TableTest>("select * from TableTest where Name=? and Pwd=?", tableTest.Name, tableTest.Pwd).Result;
}
/// <summary>
/// 通過Id獲取一條資料
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public TableTest GetTableDataById(int id)
{
return _SQLiteDBConnection.QueryAsync<TableTest>("select * from TableTest where Id=?", id).Result.FirstOrDefault();
}
/// <summary>
/// 查詢全部的資料
/// 返回一個可供查詢的表,後篩選
/// </summary>
/// <param name="tableTest">條件</param>
/// <returns></returns>
public List<TableTest> GetTableDataByWhere(TableTest tableTest=null)
{
if (tableTest !=null)
{
return _SQLiteDBConnection.Table<TableTest>().Where(t => t.Name == tableTest.Name).ToListAsync().Result;
}
else
{
return _SQLiteDBConnection.Table<TableTest>().ToListAsync().Result;
}
}
#endregion 查詢表資料
#region 事務
// 執行事務
public void RunInTransactionAsync()
{
// 操作
TableTest insertObj = new();
TableTest updateObj = new();
TableTest deleteObj = new();
_SQLiteDBConnection.RunInTransactionAsync(tran =>
{
// database calls inside the transaction
tran.Insert(insertObj);
tran.Update(updateObj);
tran.Delete(deleteObj);
});
}
#endregion 事務
#region 建立表
/// <summary>
/// 建立表
/// </summary>
public void CtreatTableDemo()
{
_SQLiteDBConnection.CreateTableAsync<TableTest>();
}
#endregion 建立表
#region 刪除表
/// <summary>
/// 刪除表
/// </summary>
public void DropTableDemo()
{
_SQLiteDBConnection.DropTableAsync<TableTest>();
}
#endregion 刪除表
#region 新增列或修改列、刪除列結構;新增、刪除索引
/// <summary>
/// 新增列或修改列結構
/// </summary>
public void ModifyColumnsForTableDemo()
{
_SQLiteDBConnection.CreateTableAsync<TableTest>();
}
#endregion 新增列或修改列、刪除列結構;
#region 新增、刪除索引(可以用特徵指定)
/// <summary>
/// 建立索引
/// </summary>
public int CreateIndexAsync()
{
TableTest tableTest = new();
string indexName = "TTName_Index"; // 索引名
bool unique = false; // 是否唯一索引
//return _SQLiteDBConnection.CreateIndexAsync(nameof(TableTest), nameof(tableTest.Name), unique).Result; // 單個列索引
return _SQLiteDBConnection.CreateIndexAsync(indexName, nameof(TableTest), nameof(tableTest.Name), unique).Result; // 單個列索引_指定索引名
//return _SQLiteDBConnection.CreateIndexAsync(nameof(TableTest),new string[] { nameof(tableTest.Name), nameof(tableTest.Pwd), nameof(tableTest.Description) }, unique).Result; // 多個列索引
}
#endregion 新增、刪除索引(可以用特徵指定)
}
}