2011-01-30 8 views
5

しばらく私のF-Spotデータベースに問題がありましたが、何も壊れていません。しかし今、私のように思えます。私は起動時にクラッシュするので、F-Spotを起動することさえできません。コンソールを確認すると、何が壊れているかは、 "System.UriFormatException:URIスキームは文字で始まり、アルファベット、数字、 '+'、 ' - 'または '。'のいずれかでなければならないというメッセージのあるUriFormatExceptionです。キャラクター。"。これは、Microsoftのランタイムではなく、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です。自身sqlite3の(データベースファイルが間違いなくある

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; 
} 

、細かい作業をしている:私は完全を期すためにもここに関連するコードをコピーしています、のSystem.Data.dllとMono.Data.SqliteClient.dllに対してリンクそれについての苦情はありません)。グーグルでは、さまざまな小規模なデータベースエンジンを比較しているページがたくさんあります。ファイルのヒントはおそらくSQLite2データベースです。しかしAFAIK私のシステムにはSQLite2ライブラリがありません。fileはそのファイルが "SQLite 3.xデータベース"であると主張しています。それだけでなく、0.3.5 require SQLite 3より新しいF-Spotバージョン、そして私はバージョン0.6.2になっています。私は間違ったAPIを使ってそれを読んでいるのですか、あるいはDSNが間違っていますか?

何を試してもらうための提案はありがたいです。確かに私はsqlite3を使ってデータを抽出し、それをテキストファイルに保存し、それらを解析しますが、F-Spotと同じAPIの近くで使用することで可能ならば避けたいという不確実性の層をもうけます私はデータにアクセスすることができます。

答えて

4

具体的には、接続文字列にsqliteエンジンのバージョンを設定する必要があると思います。接続文字列定数に "version = 3"を追加してみてください。私はあなたのコードを少し変えて、それがあなたのために働くかどうかを見てみましょう。詳細については

public static void Main(string[] args) { 
    string connectionString = "URI=file:f-spot.photos.db,version=3"; //<-- version is set to 3 
    IDbConnection dbcon; 
    dbcon = (IDbConnection) new SqliteConnection(connectionString); 
    dbcon.Open(); 
    dbcon.Close(); 
    dbcon = null; 
} 

に関しては、ドキュメントこのことができます here

希望の「接続文字列フォーマット」セクションをご確認ください

関連する問題