我尝试在设置连接时加载新的json1扩展,但我一直收到此错误:
SQL逻辑错误或缺少数据库
找不到指定的程序。
这是我的代码:
SQLiteConnection connection = (SQLiteConnection)session.Connection;
connection.EnableExtensions(true);
Assembly assembly = Assembly.Load("System.Data.SQLite");
connection.LoadExtension(assembly.Location, "sqlite3_json_init");
我正在使用NHibernate,所以我只是在执行任何逻辑之前从会话中获取连接。
我做错了吗?我还尝试加载SQLite.Interop.dll,然后调用sqlite3_json_init
方法,但仍然无效。
我这样做了,它似乎仍然无法运作:
SQLiteConnection connection = (SQLiteConnection)session.Connection;
connection.EnableExtensions(true);
string path = "F:\\GitHub\\ExampleProj\\lib\\sqlite\\SQLite.Interop.dll";
if (File.Exists(path))
{
connection.LoadExtension(path,
"sqlite3_json_init");
}
答案 0 :(得分:5)
从SQLite.Interop.dll加载扩展是正确的方法。所以你应该能够做到以下几点:
connection.EnableExtensions(true);
connection.LoadExtension(@"full\path\to\SQLite.Interop.dll", "sqlite3_json_init");
我已经对此进行了测试并且它正在运行,因此如果您仍有问题,则可能需要说明您是如何获取互操作文件的路径的。出于调试目的,可能在LoadExtension之前添加一个断言,以确保您尝试加载的互操作文件实际存在于您认为的位置。
还要确保您正在加载正确的版本(x86与x64。)如果您尝试了错误的版本,您将获得,"找不到指定的模块。" #34;在LoadExtension调用中,即使它实际上在那里。
答案 1 :(得分:3)
实际上看起来你不需要输入interop文件的完整路径..显然它确定了你正在使用的处理器架构,并根据它找到bin文件夹中的SQLite.Interop.dll文件(bin /x64/SQLite.Interop.dll)。我只需要给它一个interop文件的名称,它就可以了:
SQLiteConnection connection = (SQLiteConnection)sender;
connection.EnableExtensions(true);
connection.LoadExtension("SQLite.Interop.dll", "sqlite3_json_init");