2017-05-11 45 views
0

我正在使用SQLite處理Unity項目。當我打開加密數據庫時,下面的錯誤消息顯示出來:C#SQLite無法使用密碼加密打開

EntryPointNotFoundException:sqlite3_key Mono.Data.Sqlite.SQLite3.SetPassword(System.Byte [] passwordBytes) Mono.Data.Sqlite.SqliteConnection。打開()SQLiteHandler.Start()(在 資產/腳本/ SQLiteHandler.cs:18)

這裏是我的連接代碼,既不把密碼輸入到連接字符串,也不使用SetPassword工作。

connString = string.Format("Data Source={0};Version=3;Password=testing123",Application.dataPath+"/demodb.db"); 
using (conn = new SqliteConnection (connString)) { 
    conn.Open(); 
    //do something 
    conn.Close(); 
} 
+0

幾件事: 1.你確定你有合適的版本? 2.我在這裏看到一些問題,我假設你是爲你的例子犯的錯誤,並且不存在於你的實際代碼中,比如你從不聲明'conn'。 – stybl

+0

1.如何檢查版本?是的,'conn'已經被很好地聲明,這裏只是我的代碼的一部分。 –

+0

已檢查。使用的版本是3.18 –

回答

0

Mono.Data.Sqlite不支持密碼保護,它不包括sqlite3_key和sqlite3_rekey兩個關鍵入口點。所以,最好查找其他擴展或庫。

下面是一個有用的Unity軟件包SqlCipher4Unity ,它非常適合密碼保護。

0

你必須在創建最初的數據庫(它被打開或至少之前)使用SetPassword() - 例如:

SQLiteConnection.CreateFile(DataPath + "/SomeDb.sqlite"); 
SQLiteConnection cnn = new SQLiteConnection("Data Source=" + DataPath + "/SomeDb.sqlite"); 
cnn.SetPassword("testing123!"); 

然後你就可以在連接字符串中使用的密碼訪問數據庫 - 例如:

var ConnectionString = "Data Source=" + DataPath + "/SomeDb.sqlite;Password=testing123!;"; 

希望這會幫助你。

+0

感謝您的評論!數據庫文件已經創建,但無法使用密碼訪問。 我可以訪問它,如果數據庫沒有設置密碼保護,所以我不認爲這是一個數據庫文件的問題,但實施問題。 –

+0

我相信密碼保護僅在版本3中可用 - 您在連接字符串中特別說明版本= 3,但是SQLite文件版本3?您是在代碼中自己創建文件,還是從其他位置獲取文件? –

+0

這是一個老話題,但是有關Unity網站的討論可能值得一試:[Unity3D論壇](https://forum.unity3d.com/threads/sqlite-password-support-in-unity-must -have-encryption.128907 /) –