У меня были проблемы с базой данных F-Spot, но ничего не мешало.Теперь, однако, похоже, что я делаю;Я даже не могу запустить F-Spot, так как он падает при запуске.Проверяя консоль, что она ломает, это UriFormatException
с сообщением «System.UriFormatException: схема URI должна начинаться с буквы и должна состоять из одного из алфавита, цифр,« + »,« - »или«. »персонаж.".Это работает на Mono 2.4.4.0, а не на Microsoft.
По сути, я пытаюсь выяснить, какие именно строки данных повреждены, так что я могу либо исправить их, либо подать отчет об ошибке в F-Место.(Я непосредственно раньше вмешивался в файл базы данных, что могло бы вызвать эту проблему - в любом случае, казалось бы, что он должен справиться с чем-то подобным лучше, чем с помощью крушения, но в этот самый момент меня больше интересуетв исправлении данных, чем точная причина, по которой сбой не обрабатывается немного более изящно.) База данных представляет собой файл SQLite3, и, запустив его вручную в приложении командной строки sqlite3
, я могу выбрать обе таблицыметаданные, а также сами таблицы данных.Тем не менее, я получаю необработанное исключение System.ApplicationException: file is encrypted or is not a database
из Mono.Data.SqliteClient.SqliteConnection.Open () из простого тестового приложения, которое является ничем иным, как копированием-вставкой из официального руководства для SQLite и Mono .Связывая System.Data.dll и Mono.Data.SqliteClient.dll, я также копирую соответствующий код здесь для полноты:
public static void Main(string[] args) {
string connectionString = "URI=file:f-spot.photos.db";
IDbConnection dbcon;
dbcon = (IDbConnection) new SqliteConnection(connectionString);
dbcon.Open();
dbcon.Close();
dbcon = null;
}
Файл базы данных определенно существует и работает нормально (sqlite3сам по себе нареканий нет).Поиск в Google дает мне множество страниц, сравнивающих различные малогабаритные движки баз данных, и намекает на то, что файл может быть базой данных SQLite2.Тем не менее, AFAIK У меня нет библиотек SQLite2 в моей системе, и file
специально заявляет, что файл является «базой данных SQLite 3.x».Мало того, версии F-Spot, более новые, чем 0.3.5 , требуют SQLite 3 , а я использую версию 0.6.2, и уже давно.Я пытаюсь прочитать его, используя неправильный API, или случайно DSN не так?
Буду признателен за любые предложения о том, что попробовать.Конечно, я могу использовать sqlite3
для извлечения данных, сохранения их в текстовые файлы, а затем для их анализа, но это вводит еще пару уровней неопределенности, которых я действительно предпочел бы избежать, если это возможно, используя как можно более близкий API, чем F-Спот как я могу получить доступ к данным.