sqlite-net-pcl-C#版_安装与使用教程
一、安装:
1、引用NuGet包:
2、sqlite-net-pcl的“数据库连接类”与“数据库配置文件”;
① 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配置数据
*│ 作 者:执笔小白
*│ 版 本: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>
[Table("tableTest")]
public class TableTest
{
public TableTest() { }
/// <summary>
/// 主键,自增,唯一
/// </summary>
[PrimaryKey, AutoIncrement, Unique]
public int Id { get; set; }
/// <summary>
/// 索引,
/// </summary>
[Indexed]
public string Name { get; set; } = string.Empty;
/// <summary>
/// 列名,限制文本长度
/// </summary>
[Column("pwd"), MaxLength(12)]
public string Pwd { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
/// <summary>
/// Ignore:忽略此属性加入ORM
/// </summary>
[Ignore]
public string Test { get; set; } = string.Empty;
}
}
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 sql执行
public void RunSQL(){
_SQLiteDBConnection.ExecuteAsync("create table Stock(Symbol varchar(100) not null)");
_SQLiteDBConnection.ExecuteAsync("insert into Stock(Symbol) values (?)", "MSFT");
var stocks = _SQLiteDBConnection.QueryScalarsAsync<TableTest>("select * from Stock");
}
#endregion sql执行
#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 添加、删除索引(可以用特征指定)
}
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/16973918.html
分类:
数据库-关系数据库+ORM框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示