我一直在使用我的F-Spot數據庫有問題,但沒有任何瑕疵。然而,現在看起來就像我一樣。我甚至無法啓動F-Spot,因爲它在啓動時崩潰。檢查控制檯,什麼打破它是一個UriFormatException
消息「System.UriFormatException:URI方案必須以字母開頭,必須包含字母,數字,'+',' - '或'。'之一。字符。」。這是在Mono 2.4.4.0上運行的,而不是微軟的運行時。從簡單的Mono/C#應用程序中讀取SQLite3數據庫?
基本上,我試圖找出確切的數據行被破壞,所以我可以修復它們,或者提交一個針對F-Spot的錯誤報告。 (我之前一直在數據庫文件中進行干涉,這可能會造成這種麻煩 - 無論哪種方式,它似乎應該像處理這樣的事情比通過崩潰很難,但在這一刻,我更感興趣在修復數據的過程中,不是以更優雅的方式處理失敗的確切原因。)數據庫是一個SQLite3文件,並在命令行sqlite3
應用程序中手動運行它,以及數據表本身。然而,我從一個簡單的測試應用程序中得到了一個來自Mono.Data.SqliteClient.SqliteConnection.Open()的未處理異常System.ApplicationException: file is encrypted or is not a database
,這個應用程序除了從the official guide for SQLite and Mono複製粘貼外沒有其他任何東西。鏈接對System.Data.dll中和Mono.Data.SqliteClient.dll,我在這裏複製的相關代碼,以及用於完整性:
public static void Main(string[] args) {
string connectionString = "URI=file:f-spot.photos.db";
IDbConnection dbcon;
dbcon = (IDbConnection) new SqliteConnection(connectionString);
dbcon.Open();
dbcon.Close();
dbcon = null;
}
數據庫文件肯定是有,並且工作正常(sqlite3的本身具有沒有抱怨)。谷歌搜索網頁我很多頁面比較各種小型數據庫引擎,並提示可能是一個SQLite2數據庫的文件。但是,AFAIK我的系統上沒有SQLite2庫,並且file
明確聲稱該文件是「SQLite 3.x數據庫」。不僅如此,F-Spot版本比0.3.5 require SQLite 3更新,而且我的版本是0.6.2,並且已經有很長一段時間了。我是否嘗試使用錯誤的API來閱讀它,或者是因爲DSN錯誤?
有關如何嘗試的建議,將不勝感激。當然,我可以使用sqlite3
來提取數據,將其保存到文本文件中,然後解析這些數據,但是這引入了另外幾層不確定性,如果可能的話,我會盡可能避免使用與F-Spot相同的API因爲我可以訪問數據。