System.AccessViolationException с Sqlite.Connection.LoadExtension () - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть старое приложение VB.NET 2005 года, которое требует обновления Sqlite для функций JSON.

Я скачал и установил "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 not found».

После дополнительных исследований я обнаружил, что мне нужно включить расширения 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 голосов
/ 13 ноября 2018

Похоже, что из-за того, что у меня есть атрибут Sqlite Reference CopyLocal = true, расположение папок для System.Data.SQLite.dll и SQLite.Interop.dll должно быть одинаковым.

Изменение.LoadExtension to: -

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

Исправлено.

...