2

我已将我的.net 2.0项目迁移到.net 4.0. 有了这个,我不得不将system.data.sqlite库升级到可用的最新版本1.0.81

现在,当我尝试使用查询大表时select * from table出现The database disk image is malformed错误。这只发生在有很多记录的表上,小表返回记录。

请注意,如果我返回.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 运行完整性检查证明某些索引已损坏。

PRAGMA integrity_check;

IDX_AColumn 缺少很多行,索引也包含错误数量的条目。幸运的是,所有表中的数据都完好无损,只有少数索引损坏。重新索引损坏的索引解决了问题。

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

如果很多索引已损坏,您可以使用命令同时重新索引所有索引:

REINDEX;
于 2013-03-01T16:51:11.057 回答
2

您的数据库文件损坏,较旧的 SQLite 版本无法检测到这一点。

使用备份中的数据(或尽可能多地从旧数据库中刮取的数据)创建一个新的数据库文件。

于 2012-09-10T21:06:32.897 回答
1

我做了一些测试,发现实际上它只是解决它的一个小操作。

  1. 用任何软件打开数据库
  2. 删除数据库密码
  3. 保存数据库
  4. 打开数据库
  5. 再次设置密码

很愚蠢。

希望这有助于任何遇到同样问题的机构。

于 2012-12-17T17:26:27.587 回答