SQLite简介
SQLite是一款轻型的数据库,一个数据库就是一个文件,详细介绍参考官网:https://www.sqlite.org/index.html
SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。
您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。
SQLite数据与常见的MySQL、SQL等的数据库不一样,它是动态类型数据库,每个值在数据库占的存储空间根据值的大小确定,使用时需要注意数据类型的问题。
存储类
每个存储在 SQLite 数据库中的值都具有以下存储类之一:
存储类 | 描述 |
---|---|
NULL | 值是一个 NULL 值。 |
INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
BLOB | 值是一个 blob 数据,完全根据它的输入存储。 |
引用System.Data.SQLite.dll
在C#中使用SQLite数据库需要引用System.Data.SQLite.dll,下载链接:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
注:System.Data.SQLite是SQLite的ADO.NET提供程序,两者是两个不同的开源项目,现在System.Data.SQLite的开发和维护工作大部分由SQLite开发团队执行。
System.Data.SQLite的下载页面选项太多,一般人进来都不清楚要下载那些内容,下面对下载界面中的软件包做一个简单介绍。
软件包分类
下载内容按类型分为安装包、非静态连接的二进制包和静态连接的二进制包三种,区别如下:
- 安装程序包仅用于在开发人员计算机上安装,然后仅在需要VisualStudio的设计时组件时安装,不建议安装在客户机器上(理论上也可以)。
- 安装包会安装相关的动态库到系统内,并注册到GAC(Global Assembly Cache)。
- 二进制软件包旨在供开发人员使用,以便获得开发所需的汇编二进制文件,并通过XCOPY部署将其应用程序部署到客户机上。
- 两种二进制包的区别在于非托管部分的连接方式不同,非静态连接的二进制包在使用时需要VC运行时库的支持。
注:如果所有目标机器已经安装了VisualC++运行时,或者可以容易地部署,则应该避免“静态”包。
每个类型都按.NET版本分成了若干小组,每个.NET版本又分为32位和64位两组:
- 支持的.NET版本有 2.0 SP2 、 3.5 SP2 、4.0 、 4.5 、 4.5.1 、4.6 。
- 选用32位还是64位是根据使用系统来决定的,如开发时是64位(使用64位dll)系统而发布后运行在32位(使用32位dll)系统上。
注:虽然.NET高版本兼容低版本,但强烈建议选择与目标.NET Framework版本匹配的包。
在每个.NET版本-位数分组中都有2个文件包,一个带有“bundle”字样,另一个没有:
- 带有“bundle”字样的表示动态库是按混合模式编译的,在使用的时候只需要System.Data.SQLite.dll就可以了。
- 不带“bundle”的则是将非托管部分和托管部分分别编译,System.Data.SQLite.dll不能独立使用,还需要有SQLite.Interop.dll才能使用。
注:除非认为绝对必要,否则应避免使用“bundle”包。
根据上面的介绍,如果开发机器和客户机器可能具有不同的处理器体系结构,则可能需要一个以上的二进制程序包。
使用本机库预加载
本机库预加载功能从1.0.80.0版本开始可用,并且默认情况下已启用,能够自动适应当前系统的位数。为了利用此功能,必须将单独的托管程序集和互操作程序集与XCOPY部署一起使用(混合模式程序集、安装软件包部署不支持此功能)。
使用本机库预加载功能时,应用程序部署看起来如下( bin 表示将在目标计算机上部署应用程序二进制文件的目录):
- bin \ App.exe(可选,仅受管应用程序可执行程序集)
- bin \ App.dll(可选,仅托管应用程序库程序集)
- bin \ System.Data.SQLite.dll(必需,仅受管核心程序集)
- bin \ System.Data.SQLite.Linq.dll(可选,仅托管LINQ程序集)
- bin \ System.Data.SQLite.EF6.dll(可选,仅托管EF6程序集)
- bin \ x86 \ SQLite.Interop.dll(必需,x86本机互操作程序集)
- bin \ x64 \ SQLite.Interop.dll(必需,x64本机互操作程序集)
启用本机库预加载功能并显示上面的应用程序部署后,System.Data.SQLite仅限托管程序集将尝试自动检测当前进程的处理器体系结构并预加载适当的本机库,此时不用考虑客户机器的是64位还是32位。
常用部署包
我把.NET的4.6版本对应的软件包按本机库预加载功能的要求重新组装,使用时直接复制到Debug目录下即可:
sqlite-netFx46-static-binary-x64-2015-1.0.117.0.zip
sqlite-netFx46-static-binary-Win32-2015-1.0.117.0.zip
添加引用
在项目的引用上右键选择添加引用 在弹出框的左侧选择浏览 打开,并在右下角 单击 浏览 选择上一步下载后的压缩包解压后的文件夹,选择 System.Data.SQLite.dll 确定,然后选中System.Data.SQLite.dll 再次确定,即添加System.Data.SQLite.dll 引用成功。
无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块
添加引用后,运行程序会出现无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块 下面介绍如何解决这个问题:
关于SQLite.Interop.dll相信大家都已经有了(下载的压缩包解压后即可看到),那么还报找不到指定模块的异常主要原因是在32位和64位系统下不兼容导致的,接下来只要做下兼容处理即可。步骤如下:
1. 在项目目录下创建x86和x64文件夹
2. 分别将下载下来的32位和64位压缩包解压,然后将32位和64位解压文件夹下的SQLite.Interop.dll分别拷贝到x86和x64文件夹下
3. 分别修改两个文件夹中SQLite.Interop.dll的属性
复制到输出目录:始终复制
再次运行就不会出现上述异常了,希望能帮助到遇到类似问题的小伙伴