Я использую Visual Studio 2010 на Windows 7 x64. Приложение, которое я пишу, должно работать на всех платформах (AnyCPU). Я могу зашифровать / расшифровать файл базы данных, если я использую System.Data.SQLite.dll либо версию x86 (sqlite-netFx40-static-binary-bundle-Win32-2010-1.0.77.0.zip), либо x64 один (sqlite-netFx40-static-binary-bundle-x64-2010-1.0.77.0.zip).
Мне нужно, чтобы мое приложение работало на обеих платформах x86 и x64 (любой параметр сборки проекта CPU). Я попытался установить поставщик ADO.NET 4.0 (SQLite-1.0.67.1-vs2010-net4-setup.exe). Я добавил ссылку (щелкните правой кнопкой мыши проект, Добавить ссылку, вкладка .NET -> System.Data.SQLite) и запустил программу. Если я расшифрую файл и попытаюсь зашифровать, вызвав ChangePassword («myPass»), я получу следующее исключение:
System.EntryPointNotFoundException было перехвачено
Сообщение = Невозможно найти точку входа с именем «sqlite3_rekey» в DLL «System.Data.SQLite.DLL».
Source = System.Data.SQLite TypeName = ""
StackTrace:
at System.Data.SQLite.UnsafeNativeMethods.sqlite3_rekey(IntPtr db, Byte[ key, Int32 keylen)
at System.Data.SQLite.SQLite3.ChangePassword(Byte[ newPasswordBytes)
at System.Data.SQLite.SQLiteConnection.ChangePassword(Byte[ newPassword)
at System.Data.SQLite.SQLiteConnection.ChangePassword(String newPassword)
at SQLiteTest.Database.Encrypt() in C:\SQLiteTest\Database.cs:line 166
Кроме того, я попытался открыть соединение с помощью объекта SQLiteConnection, и я получил два разных исключения в двух разных случаях.
Во-первых, если файл зашифрован и я не указываю пароль в строке подключения, я получаю следующее:
System.Data.SQLite.SQLiteException было обнаружено
Сообщение = файл открыт
который не является файлом базы данных, зашифрован или не является базой данных
Source = System.Data.SQLite ErrorCode = -2147467259
Трассировки стека:
в System.Data.SQLite.SQLite3.Prepare (SQLiteConnection cnn, String strSql, SQLiteStatement предыдущий,
UInt32 timeoutMS, String & strRemain)
в System.Data.SQLite.SQLiteCommand.BuildNextCommand ()
в System.Data.SQLite.SQLiteCommand.GetStatement (индекс Int32)
в System.Data.SQLite.SQLiteDataReader.NextResult ()
в System.Data.SQLite.SQLiteDataReader..ctor (SQLiteCommand cmd, CommandBehavior ведут себя)
в System.Data.SQLite.SQLiteCommand.ExecuteReader (CommandBehavior
поведение)
в System.Data.SQLite.SQLiteCommand.ExecuteNonQuery ()
в System.Data.SQLite.SQLiteConnection.Open ()
в SQLiteTest.Database.GetAllLanguages () в C: \ SQLiteTest \ Database.cs: строка 216
Во-вторых, если я добавлю параметр пароля в строку подключения, я получу исключение System.EntryPointNotFoundException, подобное приведенному выше.
Итак, кто-нибудь знает надежный способ работы с зашифрованной базой данных SQLite в приложении C # на платформе AnyCPU?
Заранее спасибо!