0

我正在尝试将我的应用程序从访问 SQLite 切换,并且我喜欢加密。我正在尝试将“Microsoft.data.sqlite”与“SQLitePCLRaw.bundle_e_sqlcipher”一起使用,但设置密码似乎无济于事。遵循官方指南:从这里

它像这样设置它:Public DBConnection As String = "Data Source=" & Environment.CurrentDirectory & "\test.db;Mode=ReadWriteCreate;Password=testtest123" 并打开连接,我也尝试这样做:

Dim DBConnection As String = "Data Source=" & Environment.CurrentDirectory & "\test.db;Mode=ReadWriteCreate"

    Try
        Using dbconn As New SqliteConnection(DBConnection)
            dbconn.Open()
            Dim command = dbconn.CreateCommand()
            command.CommandText = "SELECT quote($password);"
            command.Parameters.AddWithValue("$password", "testtest123")
            Dim quotedpsw = New String(command.ExecuteScalar)

            command.CommandText = "PRAGMA key = " & quotedpsw
            command.Parameters.Clear()
            command.ExecuteNonQuery()
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

我在使用连接之前尝试了这些设置方法SQLitePCL.raw.SetProvider(New SQLitePCL.SQLite3Provider_e_sqlcipher()),它们都没有对其进行加密,也没有给出异常。我也尝试使用“SQLitePCLRaw.bundle_sqlcipher”,但它给出了这个例外:找不到方法“Int32 SQLitePCL.ISQLite3Provider.sqlite3_win32_set_directory(Int32,System.String)”。

我还尝试使用 SQLCipher 3 和 4 使用 SQLite 的 DB Browser 加密外部数据库,但这些方法都不能从我的应用程序连接到数据库...谢谢!

编辑。:我以为我会重新启动,所以我删除了每个包并重新下载了我最初提到的两个(+提供程序包),现在当我SQLitePCL.raw.SetProvider(New SQLitePCL.SQLite3Provider_e_sqlcipher())每次设置时都会出现异常:无法加载“e_sqlcipher”DLL。找不到指定的模块。如果有人对另一个解决方案有很好的经验,我也愿意使用另一种解决方案。

4

1 回答 1

1

将 dll 移动到解决方案资源管理器后,dll 未加载错误消失了。然后我所做的是我将文件名设置为一个不存在的文件名,以便我可以使用 microsoft.data.sqlite 创建一个新的数据库,其中 sqlitepclraw 提供程序设置为 sqlcipher(使用 battery.init),然后使用连接字符串中的密码我运行一个查询来创建一个表,像这样它确实对其进行了加密,然后我只是使用 DB Browser 将数据从旧数据库导出到新的加密数据库中。我已经尝试了很多其他的东西,这是我可以让它工作的一种方法

于 2021-08-19T08:30:30.970 回答