SQLite使用问题-

如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”。但是如果应用中使用了SQLite,情况就不同了。


SQLite的.NET开发包来自是System.Data.SQLite,完成兼容ADO.NET接口,也提供了Linq和Entity Framework 6实现。
但这不重要,重要的是System.Data.SQLite是由两部分代码组成的,一部分是非托管的C++代码实现,一部分是托管代码与.NET框架接口。
由于非托管代码不能构建成“Any CPU”的,所以System.Data.SQLite的下载页面的每个包都是按32位或64位系统进行了区分的。
说到这里,顺便说一下,看着System.Data.SQLite的下载页面就头晕。
虽然在下载页面一开始就花了大量的篇幅来说明如何选择下载,但是估计没几个人会把它看完,所以这里还是简单介绍一下。

1) 首先是按类型分为三类:"安装包"、“非静态连接的二进制包”和“静态连接的二进制包”。
“安装包”会安装相关的动态库到系统内,并注册到GAC(Global Assembly Cache);
两种“二进制包”的区别在于非托管部分的连接方式不同,非静态连接的二进制包在使用时需要VC运行时库的支持。


需要注意的是:如果需要在Visual Studio中连接SQLite数据库,就必须选择合适的安装包进行安装。
比如,要在Visual Studio 2010中连接SQLite,应该下载“sqlite-netFx40-setup-bundle-x86-2010-1.0.102.0.exe”,
这在下载包的说明中有明确黑体字说明。
地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
版本:sqlite-netFx40-setup-bundle-x86-2010-1.0.102.0.exe
说明:This setup package features the mixed-mode assembly and will install all the necessary runtime components and dependencies for the x86 version of the System.Data.SQLite 1.0.102.0 (3.13.0) package. The Visual C++ 2010 SP1 runtime for x86 is included. The .NET Framework 4.0 is required. 
This is the only setup package that is capable of installing the design-time components for Visual Studio 2010. 


2) 每个类型都按.NET版本分成了若干小组,目前从.NET 2.0 SP2到.NET 4.5.1,一共支持5个版本的.NET Framework。每个.NET版本又分为32位和64位两组。选用32位还是64位是根据使用系统来决定的。比如开发的时候是64位系统而发布后运行在32位系统上,就需要在开发时使用64位System.Data.SQLite.dll,而在发布时用32位的System.Data.SQLite.dll替换(看起来很麻烦的样子~~请看后面的解决办法~~)。


3) 在每个.NET版本分组中都有2个文件包,一个带有“bundle”字样,另一个没有。其中带有“bundle”字样的表示动态库是按混合模式编译的,在使用的时候只需要System.Data.SQLite.dll就可以了,而不带“bundle”的则是将非托管部分和托管部分分别编译,System.Data.SQLite.dll不能独立使用,还需要有SQLite.Interop.dll才能使用。
言归正传,如果要使用“Any CPU”的System.Data.SQLite.dll,就必须使用不带“bundle”字样,即非混合编译的二进制包。
 
非混合编译的二进制包有System.Data.SQLite.dll和SQLite.Interop.dll两个动态库。按官方说明,SQLite.Interop.dll是可以放与System.Data.SQLite.dll相同的目录下,也可以放在x86或x64子目录下,由System.Data.SQLite.dll根据系统类型调用。


为了确认,下载如下两个包来进行比较:
sqlite-netFx40-binary-Win32-2010-1.0.90.0.zip
sqlite-netFx40-binary-x64-2010-1.0.90.0.zip
 结果发现只有SQLite.Interop.*不同,其它文件都完全相同
然后将两个包的SQLite.Interop.*分别放在x86和x64子目录下,合并成一个包。再在不同类型的系统下运行test.exe,结果都是完全通过


最后需要做的就是在Visual Studio项目中:
1>引用System.Data.SQLite.dll,
2>再将x86\SQLite.Interop.dll和x64\SQLite.Interop.dll拷贝到项目根目录,包含在项目中
3>在属性中设置“如果较新则复制”或“始终复制”。


生成结果就像这样:
TestSQLite\bin\Debug
│  System.Data.SQLite.dll
│  TestSQLite.exe
├─x64
│      SQLite.Interop.dll
└─x86
       SQLite.Interop.dll


实例:选择一个“非混合模式的(bundle)”的“静态链接库(static-binary)”,运行时为 .NET Framework 4.0,支持any cpu 的程序。
下载地址x86:
http://system.data.sqlite.org/downloads/1.0.102.0/sqlite-netFx40-static-binary-bundle-Win32-2010-1.0.102.0.zip
下载地址x64:
http://system.data.sqlite.org/downloads/1.0.102.0/sqlite-netFx40-static-binary-bundle-x64-2010-1.0.102.0.zip


其他资源地址:
下载地址:
http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki


帮助文档地址:
https://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help


关于SQLite的connection string说明:
http://www.connectionstrings.com/sqlite/

================================================================================================

我是采用32位的,sqlite.dll 和build版必须一致


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值