数据库磁盘映像格式错误sqlite

时间:2012-09-10 15:11:16

标签: .net sqlite system.data.sqlite

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

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

请注意,如果我回到.net 2.0system.data.sqlite 1.0.66,则相同的数据库文件可以正常运行。

任何想法?

3 个答案:

答案 0 :(得分:2)

您的数据库文件 已损坏,较旧的SQLite版本无法检测到此内容。

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

答案 1 :(得分:2)

最近也遇到过类似的问题。即使在使用以下查询

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

答案 2 :(得分:1)

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

  1. 使用任何软件打开数据库
  2. 删除db密码
  3. save db
  4. open db
  5. 再次设置密码
  6. 非常愚蠢。

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