我在手机游戏上使用SQLite已有数年,并且在生产中经常出现异常(无法在本地复制,或检查存在此问题的数据库),但我无法解决。数百个不同的参与者抛出了此异常,因此它可能不是数据库损坏的孤立情况。
该表只有两列:_id(int)和mycol(text),由以下命令创建:
CREATE TABLE mytable ( _id INTEGER PRIMARY KEY, mycol TEXT ) ;
当我尝试依次执行以下两个命令来读取表中的元素时,会导致异常:
A) DELETE FROM mytable WHERE mycol IS NULL OR trim(mycol) = '' ;
B) SELECT mycol FROM mytable ORDER BY _id DESC ;
然后崩溃在线了:
string myColValue = rs.GetString(0);
具有以下异常/堆栈跟踪:
InvalidCastException: Specified cast is not valid.
Mono.Data.Sqlite.SqliteDataReader.VerifyType (System.Int32 i, System.Data.DbType typ)
Mono.Data.Sqlite.SqliteDataReader.GetString (System.Int32 i)
请注意,上面的命令“ A”已经是我尝试“修复”问题,但是仍然崩溃。
我不知道还能尝试什么-哪种数据会导致该异常?如果它为null,则“ A”命令将避免它,如果它是任何其他类型的数据,则可以毫无问题地将其转换为字符串。
有什么想法吗?
一个相关的信息是我直到最近才使用的SQLite驱动程序/ dll是非常老的(从〜2013开始),所以也许那些崩溃的玩家是使用以下问题创建数据库和/或表的老玩家:这个较旧的DLL,也许数据库格式不再受支持了吗?如果是这样,那么有关如何检测到该位置的任何建议,以便我可以删除/重新创建表?
谢谢