2022-01-14 18:28发布
如果一个.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”,这在下载包的说明中有明确黑体字说明。[下载包的说明中有明确的黑体字说明] 安装之后就可以在Visual Studio 2010中连接SQLite了:[在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才能使用。
1) 首先是按类型分为安装包、非静态连接的二进制包和静态连接的二进制包。安装包会安装相关的动态库到系统内,并注册到GAC(Global Assembly Cache);两种二进制包的区别在于非托管部分的连接方式不同,非静态连接的二进制包在使用时需要VC运行时库的支持。需要注意的是:如果需要在Visual Studio中连接SQLite数据库,就必须选择合适的安装包进行安装。
比如,要在Visual Studio 2010中连接SQLite,应该下载“sqlite-netFx40-setup-bundle-x86-2010-1.0.90.0.exe”,这在下载包的说明中有明确黑体字说明。
[下载包的说明中有明确的黑体字说明]
安装之后就可以在Visual Studio 2010中连接SQLite了:
[在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.zipsqlite-netFx40-binary-x64-2010-1.0.90.0.zip
sqlite-netFx40-binary-Win32-2010-1.0.90.0.zip
sqlite-netFx40-binary-x64-2010-1.0.90.0.zip
结果发现只有SQLite.Interop.*不同,其它文件都完全相同
[比较结果:只有SQLite.Interop.*不同]
然后将两个包的SQLite.Interop.*分别放在x86和x64子目录下,合并成一个包。再在不同类型的系统下运行test.exe,结果都是完全通过
最后需要做的就是在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
TestSQLite\bin\Debug
│ System.Data.SQLite.dll
│ TestSQLite.exe
├─x64
│ SQLite.Interop.dll
└─x86
SQLite.Interop.dll
每个类型都按.NET版本分成了若干小组,目前从.NET 2.0 SP2到.NET 4.5.1,一共支持5个版本的.NET Framework。每个.NET版本又分为32位和64位两组。选用32位还是64位是根据使用系统来决定的。比如开发的时候是64位系统而发布后运”
并发问题,access理论是255个并发(不知道是读取还是写入)。而sqlite不能多线程写入。 所以在多线程写入的时候是不是access要强一点。全面支持SQLite。但ORM保留了所有数据库接口,也就是要在Access扩展开发以后才会支持Access....
SQLite 开发人员更喜欢专注于大客户愿意花钱购买的功能。
《SQL必知必会》《SQL基础教程》《SQL Cookbook》《深入浅出SQL(中文版)》《SQL 反模式》
import csv, sqlite3con = sqlite3.connect(:memory:) # change to 'sqlite:///your_filename.db'cur = con.cursor()cur.execute(CREATE TABLE t (col1, col2);) # use your column names herewith open(...
导出sql文件 在sqlite执行就行
1.选择右上角的导出手机按钮,然后存储到本地。2.使用SQLite助手来打开db文件。
.db .db3是为了标识sqlite版本不同 至于说叫.db 或者.sqlite区别不大。安卓下或者说linux下不依赖后缀识别文件
sqlite是文件型数据库,所以它本身不支持网络访问。折中的办法有两个1是将sqlite数据库上传至vps/云主机,自行写一个介于你软件和数据库的中间件,由它负责获取请求并传回对应的数据。至于连接方式是http还是直接的socket这取决于你。优点:对软件的修改程度最...
SQLite原本是个 embedded database, 但是后来SQLite 被大量客户端软件,例如Firefox, Chrome, 微信等用作客户端缓存数据库,客户端缓存了数据,就不需要去服务端取数据了,减少了服务器压力,缓存数据库的叫法就是这么来的但是始终记住它是一个嵌入数据库,可...
140tb,理论上只要硬盘够大…… 没有必要挑战最大吧?这是嵌入式数据库,都不大的。如果你的数据库超过1G大,我就建议你换用大型数据库,sqlserver、甲骨文等
SQLIte数据库最大支持128TiB(140 terabytes, or 128 tebibytes, or 140,000 gigabytes or 128,000 gibibytes).
架构差异 – SQLite与MySQLSQLite是一个在公共领域中可用的开源项目MySQL是一个由Oracle拥有的开源项目SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作为应用程序的一部分运行。另一方面,MySQL需要运行服务器,MySQL...
SQLite原生支持5中数据类型:NULL、INTEGER、REAL、TEXT、BLOB。在SQLite中,所有数据最终都转化为该5中类型进行存储。在SQLite中不支持BOOLEAN,在存储时,会将false转换为0,true转换为1。同时SQLite不支持Date和Time数据类型,但是内置提供了一些时间操作...
First, avoid concurrent access to sqlite database files. Concurrency is one of sqlite's weak points and if you have a highly concurrent application, consider using another database engine.If you c...
会写基本的Sql就可以了;建议重点关注select 部分的学习,增删改根本用不上,但是类似于join ,group by这些还是要回的
最多设置5个标签!
如果一个.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的下载页面就头晕。虽然在下载页面一开始就花了大量的篇幅来说明如何选择下载,但是估计没几个人会把它看完,所以这里还是简单介绍一下。
言归正传,如果要使用“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.Interop.*不同,其它文件都完全相同
[比较结果:只有SQLite.Interop.*不同]
然后将两个包的SQLite.Interop.*分别放在x86和x64子目录下,合并成一个包。再在不同类型的系统下运行test.exe,结果都是完全通过
最后需要做的就是在Visual Studio项目中引用System.Data.SQLite.dll,再将x86\SQLite.Interop.dll和x64\SQLite.Interop.dll拷贝到项目根目录,包含在项目中,在属性中设置“如果较新则复制”或“始终复制”。生成结果就像这样:
每个类型都按.NET版本分成了若干小组,目前从.NET 2.0 SP2到.NET 4.5.1,一共支持5个版本的.NET Framework。每个.NET版本又分为32位和64位两组。选用32位还是64位是根据使用系统来决定的。比如开发的时候是64位系统而发布后运”
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的下载页面就头晕。虽然在下载页面一开始就花了大量的篇幅来说明如何选择下载,但是估计没几个人会把它看完,所以这里还是简单介绍一下。
相关问题推荐
并发问题,access理论是255个并发(不知道是读取还是写入)。而sqlite不能多线程写入。 所以在多线程写入的时候是不是access要强一点。全面支持SQLite。但ORM保留了所有数据库接口,也就是要在Access扩展开发以后才会支持Access....
SQLite 开发人员更喜欢专注于大客户愿意花钱购买的功能。
《SQL必知必会》《SQL基础教程》《SQL Cookbook》《深入浅出SQL(中文版)》《SQL 反模式》
import csv, sqlite3con = sqlite3.connect(:memory:) # change to 'sqlite:///your_filename.db'cur = con.cursor()cur.execute(CREATE TABLE t (col1, col2);) # use your column names herewith open(...
导出sql文件 在sqlite执行就行
1.选择右上角的导出手机按钮,然后存储到本地。2.使用SQLite助手来打开db文件。
.db .db3是为了标识sqlite版本不同 至于说叫.db 或者.sqlite区别不大。安卓下或者说linux下不依赖后缀识别文件
sqlite是文件型数据库,所以它本身不支持网络访问。折中的办法有两个1是将sqlite数据库上传至vps/云主机,自行写一个介于你软件和数据库的中间件,由它负责获取请求并传回对应的数据。至于连接方式是http还是直接的socket这取决于你。优点:对软件的修改程度最...
SQLite原本是个 embedded database, 但是后来SQLite 被大量客户端软件,例如Firefox, Chrome, 微信等用作客户端缓存数据库,客户端缓存了数据,就不需要去服务端取数据了,减少了服务器压力,缓存数据库的叫法就是这么来的但是始终记住它是一个嵌入数据库,可...
140tb,理论上只要硬盘够大…… 没有必要挑战最大吧?这是嵌入式数据库,都不大的。如果你的数据库超过1G大,我就建议你换用大型数据库,sqlserver、甲骨文等
SQLIte数据库最大支持128TiB(140 terabytes, or 128 tebibytes, or 140,000 gigabytes or 128,000 gibibytes).
架构差异 – SQLite与MySQLSQLite是一个在公共领域中可用的开源项目MySQL是一个由Oracle拥有的开源项目SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作为应用程序的一部分运行。另一方面,MySQL需要运行服务器,MySQL...
SQLite原生支持5中数据类型:NULL、INTEGER、REAL、TEXT、BLOB。在SQLite中,所有数据最终都转化为该5中类型进行存储。在SQLite中不支持BOOLEAN,在存储时,会将false转换为0,true转换为1。同时SQLite不支持Date和Time数据类型,但是内置提供了一些时间操作...
First, avoid concurrent access to sqlite database files. Concurrency is one of sqlite's weak points and if you have a highly concurrent application, consider using another database engine.If you c...
会写基本的Sql就可以了;建议重点关注select 部分的学习,增删改根本用不上,但是类似于join ,group by这些还是要回的