C# sqlite 无法加载sqlite3.dll

标签 c# sqlite nuget

我已经使用 nuget 安装了 sqlite-netSystem.Data.SQLite (x86/x64)。我已经重建并重新启动,但仍然收到以下错误:无法加载 DLL 'sqlite3':找不到指定的模块。 (HRESULT 异常:0x8007007E)。这是触发它的行:

db = new SQLiteConnection("Data Source=C:\\Users\\xxxxxxx\\Desktop\\mydb.sqlite;Version=3;");

我错过了什么吗?这难道不应该奏效吗?

最佳答案

您已经安装了两种不同的方式来从 C# 与 SQLite 通信,但它们并不完全兼容:围绕原生“sqlite3.dll”程序集的薄 sqlite-net 包装器,以及“System.Data.SQLite”全功能。 NET 数据提供程序。

sqlite-net 只是将一些源文件添加到您的项目(SQLite.cs 和 SQLiteAsync.cs)。在这些里面,你会看到很多像这样的 extern 声明:

[DllImport("sqlite3" , EntryPoint = "sqlite3_open_v2", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open ([MarshalAs(UnmanagedType.LPStr)] string filename, out IntPtr db, int flags, IntPtr zvfs);

sqlite-net 假定在您的输出目录中有一个名为“sqlite3.dll”的文件。安装System.Data.SQLite包不会给你这个文件,虽然文件“System.Data.SQLite.dll”实际上是一个与“sqlite3.dll”兼容的混合程序集。

所以你有两个选择:

  1. http://www.sqlite.org/download.html 下载 sqlite3.dll native 库

  2. 在现在属于您的项目的 sqlite-net 源文件中找到所有引用,并将它们从

    [DllImport("sqlite3", ...
    

    [DllImport("System.Data.SQLite.dll", ...
    

选择两种方法(sqlite-net 或 System.Data.SQLite)中的一种并卸载另一个包(两者各有利弊)可能是个好主意。

关于C# sqlite 无法加载sqlite3.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30468002/

相关文章:

python - 如何将具有更多条目的 SQLite 数据库压缩为更小的文件大小?

c# - 通过 C# 访问 sqlite 数据库时相对路径不起作用

c# - 运行新的 google v3 api 应用程序时出错

visual-studio - VS Enterprise .NET Build Extensions 版本的 System.Net.Http 覆盖预期的 4.3.3 nuget 版本

visual-studio - 如何通过 NuGet 包控制台卸载包?

c# - 当表单大小调整时,如何按比例调整 DataGridView 的大小?

c# - 编辑 Xml 文件时 SelectSingleNode 不工作

c# - 在 C# 中使用第三方代码

c# - Random.Range(float, float) 无法通过实例引用访问;用类型名称来限定它

sqlite - metaData.getPrimaryKeys() 在组合键时返回单行