带有Sqlite.Connection.LoadExtension()的System.AccessViolationException

时间:2018-11-13 08:07:20

标签: sqlite sqlite-net

我有一个旧的2005 VB.NET应用程序,该应用程序需要对JSON函数进行Sqlite更新。

我已经下载并安装了“ sqlite-netFx20-setup-bundle-x86-2005-1.0.109.0.exe”。我删除了对旧版本的引用,并重新引用了这个新版本。我编译了一个运行程序-一切似乎都还可以。

使用JSON的在线示例,将以下代码放在TestButton后面:-

jsondb.SQL = "CREATE TABLE user (name, phone)"
ExecuteSQLiteCommand(jsondb)
jsondb.SQL = "INSERT INTO user (name, phone) values('oz',  json('{""""cell"""":""""+491765"""", """"home"""":""""+498973""""}'))"
ExecuteSQLiteCommand(jsondb)

执行“ INSERT”时,出现“找不到json函数”。

经过更多研究,我发现必须使用以下命令启用json扩展:-

mySQLdb.Connection.Open()
mySQLdb.Connection.EnableExtensions(True)
mySQLdb.Connection.LoadExtension("SQLite.Interop.dll", "sqlite3_json_init")

最初,.LoadExtension失败,因为未找到“ SQLite.Interop.dll”模块。

我在“ sqlite-netFx20-binary-Win32-2005-1.0.109.0.zip”中找到了此模块的副本,并将其复制到Sqlite安装目录中,并将.LoadExension方法更改为:-

mySQLdb.Connection.LoadExtension("C:\Program Files\System.Data.SQLite\2005\bin\SQLite.Interop.dll", "sqlite3_json_init")

现在.LoadExension方法引发异常“ System.AccessViolationException”。

有人知道我该如何解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

似乎因为我具有Sqlite参考属性CopyLocal = true,所以System.Data.SQLite.dll和SQLite.Interop.dll的文件夹位置必须相同。

将.LoadExtension更改为:-

mySQLdb.Connection.LoadExtension(My.Application.Info.DirectoryPath & "\SQLite.Interop.dll", "sqlite3_json_init")

解决了这个问题。