C# SQlite连接字符串格式

16

我有两个问题:

  1. 我从SQLite网站下载了SQLite,并且对于.NET 4.5,有一个“混合模式”版本和一个“非混合模式”版本。我该如何知道使用哪个版本?

连接时使用以下命令:

>sqlite_conn = new SQLiteConnection("Data Source=db.db;Version=3;New=True;Compress=True;");

  1. 我假设“Version=3”代表正在使用的SQLite版本。如果我从上面的链接下载,版本为System.Data.SQLite 1.0.84.0(3.7.15.2)软件包;我应该将Version=3更改为Version=3.7.15.2吗?
3个回答

22
  1. 你应该选择混合的那个。
  2. 1.0.84.0是最新版本的SQLite DLL。我也用c#创建了一个带有SQLite的应用程序,我的连接字符串如下所示:

  3. sqlite_conn = new SQLiteConnection("Data Source=C:\SQLITEDATABASES\SQLITEDB1.sqlite;Version=3;");
    

您正在使用的版本是SQLite 3版,而DLL只是不同版本,但可与SQLite 3版一起使用。


11

以下是不同类型的Sqlite连接字符串:

基本

Data Source=c:\mydb.db;Version=3;

该类库不支持版本2。

内存数据库 SQLite数据库通常存储在磁盘上,但数据库也可以存储在内存中。

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

使用UTF16编码

Data Source=c:\mydb.db;Version=3;UseUTF16Encoding=True;

带密码

Data Source=c:\mydb.db;Version=3;Password=myPassword;


4

SQLite是用C语言编写的。对于Windows平台,它以32位(x86)的.dll文件形式分发。因为它是本机代码,而.NET程序通常不喜欢与本机代码交互,所以不能直接从.NET中使用。虽然可以使用称为COM互操作的东西来解决这个问题,但在我的手中这并不容易或美观。

在你的问题中,你提到了一个下载页面,那是System.Data.SQLite的页面。这是一种稍微不同的实现方式,它将C SQLite与.NET代码包装在一起,使得.NET程序可以使用C本机代码(太好了,有人已经做了这项工作)。

当你在一个程序集中同时拥有本机代码(C SQLite)和.NET代码(包装函数)时,这被称为混合模式程序集,最初将所有内容放在一个文件中是有意义的。如果你正在进行开发或仅在自己的计算机上使用SQLite,那么使用混合模式程序集就可以了。

然而,随着64位Windows的出现,如果你想要将应用程序分发给客户,情况就有所改变了。这是因为混合模式程序集只能在它们编译的架构上运行(这是一个小谎言,但对于这个答案来说是真的)。从System.Data.SQLite的1.0.80.0版本开始,强烈建议你分发以下内容: 1.) 所有的.NET .dll文件System.Data.SQLite.dll,可以在32位或64位架构上运行) AND 2.) 一个32位的.dll文件x86\SQLite.Interop.dll AND 3. 一个64位的.dll文件x64\SQLite.Interop.dll

所有的.NET包装器(项目1)会确定它正在运行的架构,并相应地选择32位或64位的.dll文件。

所有这些都在你提到的System.Data.SQLite下载页面上有描述,但我觉得有点困惑,所以我提供了我的总结。

你在问题中提到的版本差异也是由于SQLite和System.Data.SQLite之间的差异造成的。


link - VictorEE
System.Data.SQLite也是ADO.NET的实现,但我没有提到这个方面,因为它与你的问题无关。请参见C# wrapper for SQLite - VictorEE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接