SQLite 的版本问题

简介: 原文:SQLite 的版本问题 在SQLite官方网站上的下载包真可以看花眼。不同的.net版本,还有不同的平台,开发和发布时需要加以注意。
原文: SQLite 的版本问题

在SQLite官方网站上的下载包真可以看花眼。不同的.net版本,还有不同的平台,开发和发布时需要加以注意。

在网上搜了搜,早有人注意到了。


关于在.Net开发中使用Sqlite的版本选择问题

原文: 关于在.Net开发中使用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.90.0.exe”,这在下载包的说明中有明确黑体字说明。

wKioL1L2-2mij_P_AAJV6pRtu7c170.jpg
[下载包的说明中有明确的黑体字说明]

 

  安装之后就可以在Visual Studio 2010中连接SQLite了:

wKiom1L2-eqwJv4jAAE2HS7eYKM589.jpg
[在Visual Studio中连接SQLite]

 

  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.*不同,其它文件都完全相同

wKiom1L3AN-yjXWaAAdjyVYpUAk800.jpg
[比较结果:只有SQLite.Interop.*不同]

 

  然后将两个包的SQLite.Interop.*分别放在x86和x64子目录下,合并成一个包。再在不同类型的系统下运行test.exe,结果都是完全通过

wKioL1L3AWWiY0tNAAUO5xpmciI727.jpg

 

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

TestSQLite\bin\Debug

│  System.Data.SQLite.dll

│  TestSQLite.exe

├─x64

│      SQLite.Interop.dll

└─x86

       SQLite.Interop.dll

  组合后的包命名为“sqlite-netFx40-static-binary-x86-x64-2010-1.0.90.0.zip”,共享给大家,欢迎下载使用。

◆ 51CTO资源站共享

◆ 360云盘共享

本文出自 “边城客栈 学海无涯” 博客,请务必保留此出处http://jamesfancy.blog.51cto.com/2516291/1357462


目录
相关文章
|
22天前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
155 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
15天前
|
关系型数据库 分布式数据库 数据库
开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。
|
20天前
|
SQL 存储 小程序
【教程】navicat配合HTTP通道远程连接SQLite数据库
本文介绍了如何通过 Navicat Premium 工具配合 n_tunnel_sqlite.php 和 HTTP 通道远程连接服务器上的 SQLite 数据库。SQLite 是一种自给自足的、无服务器的 SQL 数据库引擎,由于其端口未对外开放,直接使用 Navicat 进行远程连接不可行。文章详细记录了使用 HTTP 通道实现远程连接的过程,包括定位本地 `ntunnel_sqlite.php` 文件,将其上传至服务器,并通过 Navicat 配置 HTTP 通道连接 SQLite 数据库的具体步骤。
19 0
【教程】navicat配合HTTP通道远程连接SQLite数据库
|
1月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
45 3
C#winform中使用SQLite数据库
|
28天前
|
SQL 数据可视化 关系型数据库
成功解决7版本的数据库导入 8版本数据库脚本报错问题
您提供的链接是一篇关于如何解决在MySQL数据库中导入脚本时出现版本兼容性问题的博客文章。文章中提到,如果在MySQL 5.7之前的版本中使用utf8mb4_0900_ai_ci排序规则,会遇到"Unknown collation"错误。解决办法包括升级MySQL版本到8.0或更高,或者更改排序规则为utf8mb4_general_ci或utf8mb4_unicode_ci,并提供了修改SQL脚本的示例。 如果您需要更详细的信息或有其他问题,请告诉我。
|
26天前
|
关系型数据库 MySQL Shell
MySQL数据库一键安装脚本,适合任何版本
MySQL数据库一键安装脚本,适合任何版本
30 2
|
28天前
|
Java 数据库连接 数据库
java系列之~如何给sqlite数据库添加表
这篇文章介绍了如何在Java中使用SQLite JDBC驱动来连接SQLite数据库,并提供了示例代码来演示如何创建一个新的数据库表。
|
29天前
|
SQL 存储 数据库
SQLite数据库
【8月更文挑战第21天】SQLite数据库
32 3
|
30天前
|
存储 数据库 数据库管理
SQLite数据库的备份
【8月更文挑战第20天】SQLite数据库的备份
92 1
|
2月前
|
SQL 数据库 数据库管理
SQLite数据库操作
【7月更文挑战第31天】SQLite数据库操作
21 6