2017-01-10 16 views
2

私は別の製品(既存のものではない)から既存のSQLiteDBを編集しています。コード内のDBが次の例外を受け取ります: "ファイルがデータベースファイルではないファイルが暗号化されているか、データベースではありません"C#SQLite DBがファイルが暗号化されているときに開くことができないか、データベースではありません

私はDBが暗号化されており、それを編集する!しかし、私はSQLiteのDBブラウザを使用し、DBは問題なく開き、パスワードなどを要求しません。

これでSQLite DB Browserを使用してDBを暗号化し、パスワードを空白のままにしました。コード内のDBは、私の問題は、このサードパーティのアプリケーションがそのDBにアクセスするたびに、何かをしています。私は上記の手順をやり直すまで、コードで再び開くことができません。

いずれかが、私は以下の私のコードのsnippitが含まれているこのような現象を発生させることができるものについての任意の手掛かりを持っています:事前に

  // Build the connection string. 
      lstrFullConnectionString = @"Data Source =" + lstrDBPathAndFileName + "; Version=" + lstrDBVersion + "; New=" + lstrDBNew + ";"; 
     mobjSQLCon = new SQLiteConnection(lstrFullConnectionString); 

     try 
     {// Fails at connection open.... 
      mobjSQLCon.Open(); 
      lblConnectionStatus.Text = "Status: Connected"; 
      btnSQLiteConnect.Text = "Disconnect"; 
     } 

おかげで、 ルーク

+0

は '私の仮定は、DBを見つける、と仮定いけないencrypted'であるということです。他のアプリケーションがそれを使用した後、ファイルに移動し、それが大きすぎない場合は、16進表示やノートパッドで開く。暗号化されている場合は、中国語のように見えます。 – Plutonix

+0

こんにちはPlutonix、ありがとうあなたの応答私はメモ帳+ +内の16進エディタプラグインを使用してDBを開いて、私は暗号化されていない情報を見ることができます。私はその後、Notepad ++だけを使って、Contracts.dbとContracts-SetBlankEncyption.dbの間のテキストと違いを見てみました。内容には目立った違いがありますが、もう一度読むことができます。ブランクの暗号化が意味することは、空のパスワードを設定してSQLite DBブラウザを使用して暗号化を削除することです。 – Luke

+0

認識可能なデータが表示され、暗号化されていない場合。例外は、あなたが暗号化されていないデータベースを使用しようとするとスローされますが、conn strにPWがあります。 – Plutonix

答えて

0

を他の誰がこの問題を持っている場合Plutonixの助けを借りて、さらに調査したところ、Hex ViewerでDBを開くときに、最初のいくつかのヘッダー行は、コードでオープンできなかった行と、開いていた行とは異なります(SQLite DBブラウザーとファイルが実際に暗号化されていないので、私はそれを使用して "暗号化"を削除します。

解決策は、バイナリレベルでファイルを編集してヘッダーを一致させるように変更することでした。これでDBを開くことができます。私は、ファイルを変更するために使用されるコードの例は以下の通りであった:

using (var lobjFileStream = new FileStream(pstrSQLiteDBPathAndFile, FileMode.Open, FileAccess.ReadWrite)) 
      { 
       lobjFileStream.Position = 19; 
       lobjFileStream.WriteByte(0x01); 
      } 

おかげで、 ルーク

関連する問題