数据库磁盘镜像是畸形的sqlite

rpc*_*pcm 2 .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.0并且system.data.sqlite 1.0.66相同的 DB 文件完美运行。

有任何想法吗?

Fai*_*oor 6

最近也遇到了类似的问题。即使使用以下查询将 ATable 表中的所有 AColumn 值更新为新值(例如 2)

UPDATE ATable SET AColumn = 2;
Run Code Online (Sandbox Code Playgroud)

以下选择不同的查询

SELECT DISTINCT AColumn from ATable;
Run Code Online (Sandbox Code Playgroud)

返回旧值,例如 1、2、3 和

SELECT * FROM ATable WHERE AColumn = 1
Run Code Online (Sandbox Code Playgroud)

导致“数据库磁盘映像的 sqlite 格式错误” 错误。

ATable 在 AColumn 上有一个索引,并且通过该索引的所有查询都返回错误的结果。使用以下 PRAGMA 运行完整性检查证明某些索引已损坏。

PRAGMA integrity_check;
Run Code Online (Sandbox Code Playgroud)

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

REINDEX ATable; http://www.sqlite.org/lang_reindex.html
Run Code Online (Sandbox Code Playgroud)

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

REINDEX;
Run Code Online (Sandbox Code Playgroud)