13

我在这里有一个两部分的问题

1) 我从这里下载了 SQLite:SQLite 网站 ,对于 .NET 4.5,有一个“混合”模式版本和“非混合模式”版本。我怎么知道我应该使用哪一个?

建立连接时,我使用以下命令:

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

2)我假设的“版本= 3”代表正在使用的 SQLite 版本。因此,如果我从上面的链接下载版本说 System.Data.SQLite 1.0.84.0 (3.7.15.2) 包,那么我应该将 Version=3 更改为 Version=3.7.15.2 吗?

4

3 回答 3

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

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

您使用的版本是SQLite版本 3,DLL 只是一个不同的版本,但适用于SQLite版本 3。

于 2013-04-05T14:25:29.733 回答
8

以下是不同类型的 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;

于 2017-08-08T01:15:05.283 回答
4

SQLite 是用 C 编写的。对于 Windows,它以编译后的 32 位 (x86) .dll 的形式分发。这不能直接从 .NET 使用,因为它是本机代码,而 .NET 程序通常不喜欢与本机代码交互。它可以用一种叫做 COM Interop 的东西来完成,但在我手中这并不容易或漂亮。

在您的问题中,您引用了 System.Data.SQLite 的下载页面。这是一个与普通的旧 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 位架构上运行)和 2 .) 32 位 .dll x86\SQLite.Interop.dll 和 3. 64 位 .dll x64\SQLite.Interop.dll

所有 .NET 包装器(第 1 项)确定它在哪个架构上运行,并相应地选择 32 位或 64 位 .dll。

所有这些都在您引用的 System.Data.SQLite 下载页面上进行了描述,但我发现它令人困惑,所以我提供了我的摘要。

您在问题中注意到的版本差异也是由于 SQLite 和 System.Data.SQLite 之间的差异。

于 2015-05-19T19:12:21.460 回答