【C#桌面客户端系列学习-10】连接SQLite数据库

目录

一、需求

二、安装教程

1、安装SQLite驱动

2、创建数据库

3、连接数据库

三、将客户端打包

1、安装Fody.Costura

2、打包SQLite.Interop.dll动态库

(1)准备DLL文件

(2)设置生成操作

(3)修改配置文件


一、需求

作为本地客户端,对于单用户单并发的情况,有时候我们需要将数据存储到本地,而不是存储到云端,所以这时候选择SQLite数据库作为本地数据库是最好的选择,他不需要考虑平台是x86还是x64,也不需要什么组件,很方便。

二、安装教程

1、安装SQLite驱动

在VS2022中,右键项目->管理NuGet程序包,搜索并安装"System.Data.SQLite.Core",安装和就可以直接使用了。

2、创建数据库

可以使用Navicat创建数据库。先在项目根目录下创建一个空的文件(因为SQLite不会自动创建数据库文件,所以需要手动先创建),并命名c_test.db,我这里存放的路径是\test\Resources\c_test.db,test是项目根目录。

由于SQLite连接时不需要用户名和密码的,只需要选择刚才创建好的c_test.db,连接即可。打开后会有一个名叫main的数据库,将需要创建的数据表在main下创建即可。

3、连接数据库

可以在app.config里配置,也可以在操作数据库的代码里写。

下面是在代码里写。

cs 复制代码
private static readonly string connectionString =
    "Data Source=" + System.IO.Path.Combine(Application.StartupPath, "c_test.db") + ";Version=3;";

至此,就可以连接SQLite数据库了。

三、将客户端打包

将客户端打包成exe,只分发给客户一个独立的exe文件就行,不需要把所有的文件包依赖包之类的再一块都给客户了。

1、安装Fody.Costura

Fody.Costura它的主要功能就是可以单独把生成的exe拿出来,可以直接运行,比如把bin/Debug/下的1.exe,放到任何一个位置或分发给任何一个人,只需要给这个exe就可以了,不需要再把完整的文件夹给别人。

在VS2022中,右键项目->管理NuGet程序包,搜索并安装"Fody.Costura",安装和就可以直接使用了。

2、打包SQLite.Interop.dll动态库

SQLite.Interop.dll 是 System.Data.SQLite 的核心组件。可以把它理解为:托管代码(C#)只是"壳",真正的 SQLite 数据库引擎(C语言写的)全在这个 DLL 里。

(1)准备DLL文件

在项目\bin\debud\下新建两个文件夹,分别为costura-win-x64和costura-win-x86,找到\bin\debug\下的x64和x86文件夹,把里面对应的SQLite.Interop.dll分别复制到costura-win-x64和costura-win-x86(32位的放进costura-win-x86,64位的放进costura-win-x64)。

(2)设置生成操作

在资源管理器找到"显示所有文件"图标,点击显示所有文件,就会看到刚刚存放的两个文件。分别设置他们的属性,复制到输出目录:始终复制,生成操作:嵌入的资源。

(3)修改配置文件

打开项目根目录下的FodyWeavers.xml文件,填写下面的代码

XML 复制代码
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
    <Costura>
	  <Unmanaged32Assemblies>
		SQLite.Interop
	  </Unmanaged32Assemblies>
	  <Unmanaged64Assemblies>
		SQLite.Interop
	  </Unmanaged64Assemblies>
	</Costura>
</Weavers>

至此,就把两个本机的SQLite.Interop.dll作为资源嵌入到主exe中,并在程序启动时自动根据系统架构加载他们。

相关推荐
CRMEB1 小时前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
sunshine8851 小时前
关联交易抵消与内部往来清理:合并报表中的“排雷”策略
大数据·数据库·人工智能
方安乐1 小时前
PostGIS_GCJ02toWGS84_操作文档
数据库·oracle
天府云创1 小时前
SRE之DeepSeek 10月15日故障分析、旁推和思考
网络·数据库·人工智能·故障处理·deepseek·api恢复
Tsuki_tl1 小时前
Redis 单线程 + 多编码,到底怎么配合的?
数据库·redis·哈希表·redis数据类型·编码方式·单线程模型·redis底层
ynchyong1 小时前
创建MySQL只读账号
android·数据库·mysql
晴天¥1 小时前
如何手动方式(无 Broker)安全删除 ADG 备库?
数据库·oracle·oracle dg
Dovis(誓平步青云)2 小时前
车辆进入隧道后信号断开,座舱旅程怎样补回事件
java·开发语言·前端·数据库·电脑
红海云2 小时前
Agent 工程化的智能面积
数据库