2

.net 2.0プロジェクトをに移行しました.net 4.0system.data.sqliteこれにより、ライブラリを利用可能な最新バージョンにアップグレードする必要があり1.0.81ました。

現在、大きなテーブルを使用してクエリを実行しようとするselect * from tableと、The database disk image is malformedエラーが発生します。これは、レコードが多いテーブルでのみ発生し、小さなテーブルはレコードを返します。

に戻って同じDBファイルが正常に機能するかどうかに注意して.net 2.0くださいsystem.data.sqlite 1.0.66

何か案は?

4

3 に答える 3

6

最近も同様の問題が発生しました。次のクエリを使用して、ATableテーブルのすべてのAColumn値を新しい値(例:2)に更新した後でも

UPDATE ATable SET AColumn = 2;

次の個別のクエリを選択します

SELECT DISTINCT AColumn from ATable;

返された古い値(例:1、2、3、および

SELECT * FROM ATable WHERE AColumn = 1

「データベースディスクイメージが不正な形式のsqliteです」という エラーが発生しました。

ATableにはAColumnにインデックスがあり、そのインデックスを通過するすべてのクエリが間違った結果を返しました。次のプラグマを使用して整合性チェックを実行すると、一部のインデックスが破損していることが証明されました。

PRAGMA integrity_check;

IDX_AColumnには多くの行がありませんでした。また、インデックスに間違った数のエントリが含まれていました。幸いなことに、すべてのテーブルのデータは無傷で、破損したインデックスはごくわずかでした。破損したインデックスのインデックスを再作成すると、問題が解決しました。

REINDEX ATable; http://www.sqlite.org/lang_reindex.html

多くのインデックスが破損している場合は、次のコマンドを使用して、すべてのインデックスを同時に再インデックスできます。

REINDEX;
于 2013-03-01T16:51:11.057 に答える
2

データベースファイル破損しています。古いバージョンのSQLiteはこれを検出しません。

バックアップからのデータを使用して(または古いDBから取得できる限り多くのデータを使用して)新しいデータベースファイルを作成します。

于 2012-09-10T21:06:32.897 に答える
1

私はいくつかのテストを行ったところ、実際にはそれを解決するほんの少しの操作であることがわかりました。

  1. 任意のソフトウェアでdbを開く
  2. dbパスワードを削除します
  3. dbを保存
  4. dbを開く
  5. パスワードを再設定してください

かなり愚かです。

これが同じ問題で立ち往生している体に役立つことを願っています。

于 2012-12-17T17:26:27.587 に答える