我已经使用 nuget 安装了 sqlite-net
和 System.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”兼容的混合程序集。
所以你有两个选择:
从 http://www.sqlite.org/download.html 下载 sqlite3.dll native 库
在现在属于您的项目的 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/