Я использую SQLite в качестве механизма базы данных в своем приложении, но в то же время приложение должно быть кросс-платформенным, поэтому я решил использовать Mono.Data.Sqlite. И это то, что я сделал:Mono.Data.Sqlite исключает исключения
Установил последнюю версию Mono (4.0.2 SR 2), скопированный Mono.Data.Sqlite.dll из каталога Моно (net4_5) в мой проект в Visual Studio 2015
Загружена и скопирована предварительно скомпилированная библиотека sqlite3.dll.
И тогда я написал простое приложение:
const string databaseFileName = "somedata.db";
var path = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + databaseFileName;
if (!File.Exists(path)) SqliteConnection.CreateFile(databaseFileName);
var connString = string.Format("Data Source=file:{0}", databaseFileName);
using (var conn = new SqliteConnection(connString))
{
conn.Open();
/* Some code */
conn.ChangePassword("testpassword");
conn.Close();
}
Но я столкнулся с некоторыми вопросами:
Во-первых, когда я использую Источник данных = файл : {0} в строке подключения генерирует исключение: «Форматы URI не поддерживаются». Замена его на URI = файл: {0} помогает, но почему первый вариант не работает?
Во-вторых, когда я называю conn.ChangePassword ("testpassword") он бросает исключение: System.EntryPointNotFoundException: Не удается найти точку входа с именем "sqlite3_rekey" в DLL "sqlite3"
Третий , используя URI = файл: {0}; Password = testpassword с уже зашифрованной базы данных выдает исключение: System.EntryPointNotFoundException: Не удается найти точку входа с именем "sqlite3_key" в DLL "sqlite3"
На самом деле это не происходит с официальной оболочкой для SQLite, но происходит с Mono.
P.S. обертка Mono работает нормально, когда я не использовать шифрование и Источник данных = файл: {0} вместо URI = файл: {0}
P.S.S. Windows 10, Visual Studio 2015 + последняя версия Mono и SQLite
Второй и третий пункты, потому что он не может найти DLL родной, что версия Mono пытается p/invoke. Простое копирование dll на базе CIL недостаточно. – SushiHangover
Я уже упоминал, что я скопировал собственную библиотеку sqlite и, кроме того, прочитал ли вы постскриптум? – maque