我已将.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
,则相同的数据库文件可以正常运行。
任何想法?
答案 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)
我做了一些测试,发现实际上它只是一个解决它的小操作。
非常愚蠢。
希望这有助于任何遇到同样问题的身体。