【发布时间】:2012-01-22 01:25:14
【问题描述】:
我在 Windows 7 x64 上运行 Visual Studio 2010。我正在编写的应用程序应该在所有平台(AnyCPU)上运行。如果我使用 x86 版本(sqlite-netFx40-static-binary-bundle-Win32-2010-1.0.77.0.zip)或 x64 的 System.Data.SQLite.dll,我可以加密/解密数据库文件一个(sqlite-netFx40-static-binary-bundle-x64-2010-1.0.77.0.zip)。
我需要我的应用在 x86 和 x64 平台上运行(任何 CPU 项目构建设置)。我尝试安装 ADO.NET 4.0 Provider (SQLite-1.0.67.1-vs2010-net4-setup.exe)。我添加了引用(右键单击项目,添加引用,.NET 选项卡 -> System.Data.SQLite)并运行程序。如果我解密文件并尝试通过调用 ChangePassword("myPass") 进行加密,则会收到以下异常:
System.EntryPointNotFoundException 被捕获
消息=无法在 DLL“System.Data.SQLite.DLL”中找到名为“sqlite3_rekey”的入口点。 源=System.Data.SQLite 类型名称="" 堆栈跟踪:
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 被捕获 消息=文件打开 不是数据库文件的文件被加密或不是数据库
源=System.Data.SQLite 错误代码=-2147467259 堆栈跟踪: 在 System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous,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:line 216
其次,如果我将密码参数添加到连接字符串中,我会得到与上面类似的 System.EntryPointNotFoundException。
那么,有人知道在 AnyCPU 平台上的 C# 应用程序中使用加密 SQLite 数据库的可靠方法吗?
提前致谢!
【问题讨论】:
-
只是好奇您在 .config 文件中是否有 2 个单独的设置/位置用于端点设置..?或者你是通过代码来操作这个..?
-
@DJKRAZE 我没有 .config 文件,它只是数据库的服务应用程序。一切都由代码完成。
-
您可能需要展示如何使用程序集或服务的示例
标签: c# .net sqlite encryption system.data.sqlite