使用Sqlite.Connection.LoadExtension()的System.AccessViolationException

问题描述 投票:0回答:1

我有一个旧的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”。

有谁知道如何解决这个问题?

提前致谢。

sqlite sqlite-net
1个回答
0
投票

看来因为我有Sqlite Reference属性CopyLocal = true,所以System.Data.SQLite.dll和SQLite.Interop.dll的文件夹位置需要相同。

将.LoadExtension更改为: -

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

修正了这一点

© www.soinside.com 2019 - 2024. All rights reserved.