当前位置: 首页 > news >正文

C#使用SQLite(含加密)保姆级教程

C#使用SQLite

文章目录

  • C#使用SQLite
    • 涉及框架及库
    • 复制runtimes
    • 创建加密SQLite文件
      • 生成连接字串
      • 执行SQL生成表
      • SQLiteConnectionFactory.cs
    • 代码结构
    • 最后

涉及框架及库

自己在NuGet管理器里面安装即可

  • Chloe.SQLite:ORM框架
  • Microsoft.Data.Sqlite.Core:驱动
  • SQLitePCLRaw.bundle_e_sqlcipher:SQLite加密扩展

复制runtimes

主要复制两个dll:e_sqlite3.dlle_sqlcipher.dll
复制到项目根目录下,保持原有的结构,删除不使用的平台即可,设置属性为如果较新则复制
在这里插入图片描述

dll文件查找位置主要是自己的nuget缓存目录中
在这里插入图片描述

或者自己去NuGet下载:SQLitePCLRaw.lib.e_sqlite3SQLitePCLRaw.lib.e_sqlcipher
在这里插入图片描述

然后用压缩软件打开即可获取到dll文件
在这里插入图片描述

创建加密SQLite文件

生成连接字串

使用SqliteConnectionStringBuilder类,我们可以便捷的构建数据库连接字符串。

SqliteConnectionStringBuilder sqliteConnectionStringBuilder = new SqliteConnectionStringBuilder();
sqliteConnectionStringBuilder.DataSource = "tanovo.db";
sqliteConnectionStringBuilder.Password = "123456";
sqliteConnectionStringBuilder.Mode = SqliteOpenMode.ReadWriteCreate;
SQLiteConnectionString = sqliteConnectionStringBuilder.ToString();

后续想在项目任何地方使用数据库,只需要使用

using var db = App.sqlite;

获取数据库上下文对象即可。

执行SQL生成表

如果不至少生成一个表在库中的话,则生成的数据库文件是非加密的,可能只有数据库有数据时,数据库才是加密类型的。

using var db = App.sqlite;
db.Session.ExecuteNonQuery(@"CREATE TABLE IF NOT EXISTS test_table(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,update_time TEXT,cteate_time TEXT);");

SQLiteConnectionFactory.cs

提供一下这个工厂类,方便伸手党直接复制了

using Chloe.Infrastructure;
using Microsoft.Data.Sqlite;
using System.Data;namespace TestSqliteC.DatabaseHelper
{public class SQLiteConnectionFactory : IDbConnectionFactory{string _connString = null;public SQLiteConnectionFactory(string connString){this._connString = connString;}public IDbConnection CreateConnection(){IDbConnection conn = new SqliteConnection(this._connString);return conn;}}
}

代码结构

因为我是WPF程序,所以在App构造函数中对SQLite就进行初始化操作了。
在这里插入图片描述

最后

这里还推荐三个开源项目,一个是嵌入式的NoSQL数据库,一个是文件存储引擎,都是同一个人开发的,项目也很不错!
最后一个是SQLiteStudio,可以打开并浏览SQLite加密数据库文件,提供图形化界面,可以管理数据库文件。

  1. LiteDB
  2. FileDB
  3. SQLiteStudio
http://www.lryc.cn/news/328001.html

相关文章:

  • C# 异步与 Unity 协程(实例讲解)
  • iOS - Runloop介绍
  • 探究分布式事务:深入ACID特性在分布式系统中的挑战与解决方案
  • PCI总线管脚定义(引脚定义)
  • 万字详解PHP+Sphinx中文亿级数据全文检索实战(实测亿级数据0.1秒搜索耗时)
  • 数据库索引及优化
  • flink: 将接收到的tcp文本流写入HBase
  • SpringBoot集成knife4j
  • Vue3之setup方法
  • MySQL常见索引及其创建
  • 高效测量“芯”搭档 | ACM32激光测距仪应用方案
  • 基于Hive大数据分析springboot为后端以及vue为前端的的民宿系
  • pnpm、monorepo分包管理、多包管理、npm、vite、前端工程化、保姆级教程
  • vue3封装Element分页
  • 真机 ARM64 架构转模拟器 ARM64 架构
  • 敏捷教练CSM认证考了有没有用,谁说了算?
  • Docker-Container
  • 下载安装anaconda和pytorch的详细方法,以及遇到的问题和解决办法
  • 2020年天津市二级分类土地利用数据(矢量)
  • 设计模式——结构型——外观模式Facade
  • OpenGL的MVP矩阵理解
  • 前端超分辨率技术应用:图像质量提升与场景实践探索-设计篇
  • C++11入门手册第一节,学完直接上手Qt(共两节)
  • Docker部署MinIO对象存储服务
  • 基于Echarts的超市销售可视化分析系统(数据+程序+论文)
  • 使用ai智能写作场景之gpt整理资料,如何ai智能写作整理资料
  • C/C++ 内存管理
  • android pdf框架-10,相册浏览
  • 基于SSM的高校普法系统(有报告)。Javaee项目。ssm项目。
  • 数据结构刷题篇 之 【力扣二叉树基础OJ】详细讲解(含每道题链接及递归图解)