我有一个旧的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”。
有人知道我该如何解决这个问题?
谢谢。
答案 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")
解决了这个问题。