SQLite GetString - указанное приведение неверно - PullRequest
0 голосов
/ 19 ноября 2018

Я использую SQLite в своей мобильной игре в течение нескольких лет, и у меня периодически возникает исключение (не удалось воспроизвести локально или проверить базу данных, в которой есть эта проблема), которую я не могу решить. Это исключение выдается сотнями разных игроков, поэтому, вероятно, это не единичный случай повреждения базы данных.

В рассматриваемой таблице есть только 2 столбца: _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" уже является моей попыткой "исправить" проблему, но она все еще дает сбой.

Я не знаю, что еще попробовать - какие данные могут вызвать это исключение? Если бы он был нулевым, команда «A» избежала бы этого, и если бы это были какие-либо другие данные, они могли бы быть без проблем преобразованы в строку.

Есть идеи?

Одной важной информацией является то, что драйвер SQLite / dll, который я использовал до недавнего времени, был ОЧЕНЬ СТАРЫМ (с ~ 2013 года), поэтому, возможно, те игроки, которые получают сбой, являются старыми игроками, в которых рассматриваемая база данных и / или таблица были созданы с помощью эта старая DLL, и, возможно, формат БД больше не поддерживается? Если да, какие-либо предложения о том, как я могу обнаружить это, чтобы я мог удалить / воссоздать таблицу?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...