关于C#中使用SQLite自适应Any CPU程序的说明

在C#中如果要使程序自适应32位和64位系统,只需要将项目的“目标平台”设置为“Any CPU”就行了,但是如果程序中使用了SQLite组件,则需要对该组件额外进行一些简单的设置:

一、下载System.Data.SQLite组件:
从官网(http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki)中下载对应.NET版本的System.Data.SQLite二进制包,由于要自适应32位和64位系统,我们需要分别下载32位和64位的非静态连接二进制包:
csharp-sqlite-any-cpu-1

二、引用System.Data.SQLite.dll:
在C#程序中引用组件“System.Data.SQLite.dll”,比对下载的这两个二进制包,我们会发现除了SQLite.Interop组件外,其他文件是一样的,所以我们可以自由选择32位或64位的System.Data.SQLite.dll文件:
csharp-sqlite-any-cpu-2

三、引用SQLite.Interop.dll:
在程序生成目录里新建x86和x64两个子文件夹,分别将下载的对应平台的SQLite.Interop.dll复制到x86和x64文件夹中,由System.Data.SQLite.dll根据系统类型自动调用。为了方便管理,我们可以在项目中创建这两个文件夹,并设置SQLite.Interop.dll文件的属性为“如果较新则复制”,生成操作为“无”,从而使程序在生成的时候自动复制SQLite.Interop.dll文件:
csharp-sqlite-any-cpu-3

四、编译生成程序:
完成以上步骤后对程序进行编译生成,程序中使用的SQLite组件就能自适应32位和64位系统了。

关于SQLite中连接字符串的说明

SQLite在SQLite.NET中的连接字符串

基本

Data Source=C:/sqlite.db;Version=3;

SQLite-2版本不支持此方法

使用内存数据库

Data Source=:memory:;Version=3;New=True;

使用UTF-16编码

Data Source=C:/sqlite.db;Version=3;UseUTF16Encoding=True;

使用密码

Data Source=C:/sqlite.db;Version=3;Password=[password];

使用SQLite-3.3x版本之前的数据库格式

Data Source=C:/sqlite.db;Version=3;Legacy Format=True;

使用连接池

Data Source=C:/sqlite.db;Version=3;Pooling=True;Max Pool Size=100;

使用只读连接

Data Source=C:/sqlite.db;Version=3;Read Only=True;

将DateTime.Ticks作为datetime格式

Data Source=C:/sqlite.db;Version=3;DateTimeFormat=Ticks;

默认使用ISO8601日期时间格式

将GUID作为text格式

Data Source=C:/sqlite.db;Version=3;BinaryGUID=False;

存储GUID文本将使用更多的数据库空间。

指定缓存大小

Data Source=C:/sqlite.db;Version=3;Cache Size=2000;

以字节为单位

指定数据页大小

Data Source=C:/sqlite.db;Version=3;Page Size=1024;

以字节为单位

禁止在分布式事务中记录

Data Source=C:/sqlite.db;Version=3;Enlist=N;

禁止创建数据库

Data Source=C:/sqlite.db;Version=3;FailIfMissing=True;

限制数据库大小

Data Source=C:/sqlite.db;Version=3;Max Page Count=5000;

禁用日志文件

Data Source=C:/sqlite.db;Version=3;Journal Mode=Off;

使用日志文件

Data Source=C:/sqlite.db;Version=3;Journal Mode=Persist;

控制文件刷新

Data Source=C:/sqlite.db;Version=3;Synchronous=Full;

设置FULL后每次操作后自动刷新,否则由操作系统决定何时去刷新

SQLite在ADO.NET驱动中的连接字符串

标准

Data Source=C:/sqlite.db;Version=3;

对于SQLite-2.x版本使用Version=2,对于SQLite-3.x版本使用Version=3

创建新数据库

Data Source=C:/sqlite.db;Version=3;New=True;

使用数据库压缩

Data Source=C:/sqlite.db;Version=3;Compress=True;

指定缓存大小

Data Source=C:/sqlite.db;Version=3;Cache Size=3000;

使用UTF-8编码

Data Source=C:/sqlite.db;Version=3;UTF8Encoding=True;

使用UTF-16编码

Data Source=C:/sqlite.db;Version=3;UTF16Encoding=True;

SQLite在ODBC驱动中的连接字符串

标准

DRIVER=SQLite3 ODBC Driver;Database=C:/sqlite.db;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;

SQLite在.NET Framework的ODBC驱动中的连接字符串

使用ODBC驱动

Driver=[驱动名称];OdbcKey1=[Value1];OdbcKey2=[Value2];

更多信息请参阅:SQLite connection strings – ConnectionStrings.com

关于SQLite中获取数据表Table信息的说明

在SQLite数据库中存在一张特殊的系统表sqlite_master(或者在一个临时数据库中被叫做sqlite_temp_master),该表存储了完整的数据库架构信息,表结构定义类似于如下方式:

create table sqlite_master(
    type text,
    name text,
    tbl_name text,
    rootpage integer,
    sql text
);

除了表sqlite_master自身外,在SQLite数据库中的每张数据表都会在sqlite_master表中记录一条数据,其记录的type字段值为“table”以表明该条数据记录的信息为数据表,而在name字段中则记录了数据表的名称,因此我们可以通过查询sqlite_master表来获取SQLite数据库中数据表的信息:

一、查询sqlite_master表数据:

select * from sqlite_master;

二、查询所有的数据表:

select name from sqlite_master where type = 'table';

三、通过查询已知名称的数据表数量来判断数据表是否存在:

select count(*) from sqlite_master where type = 'table' and name = '[数据表名]';

更多信息请参阅:File Format For SQLite Databases