Я получаю сообщение об ошибке {SQLite.Net.SQLiteException: ошибка ввода-вывода диска, при попытке создать таблицу в базе данных sqllite на Raspberry Pi 3, с ОС WIN IOT является ОС.Я использую SQLite.Net-PCL версии 3.1.1 реализацию SQLite.Это приложение UWP.Вот полная ошибка:
{SQLite.Net.SQLiteException: disk I/O error
at SQLite.Net.Platform.WinRT.SQLiteApiWinRT.Prepare2(IDbHandle db, String query)
at SQLite.Net.SQLiteCommand.Prepare()
at SQLite.Net.SQLiteCommand.ExecuteNonQuery()
at SQLite.Net.SQLiteConnection.Execute(String query, Object[] args)
at SQLite.Net.SQLiteConnection.CreateTable(Type ty, CreateFlags createFlags)
at SQLite.Net.SQLiteConnection.CreateTable[T](CreateFlags createFlags)
at InternetRadio.SQLite_Raspberry.GetConnection()}
Во-вторых, есть ли хранилище данных для этой конкретной реализации SQLite?Я использовал SQLite на Android раньше без проблем, но некоторые команды, которые я там использовал, здесь не доступны.
var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var fileName2 = "Storage.db";
var path2 = Path.Combine(documentsPath, fileName2);
try
{
using (var connection = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path2))
{
md.CreateTable<RaspTables.Category>();
}
}
catch (Exception ex)
{
string m_er = ex.ToString();
}
моя табличная реализация:
public class Category
{
[PrimaryKey, AutoIncrement]
public int _id { get; set; }
public int Cat_order { get; set; }
public string Name { get; set; }
public string Keywords { get; set; }
public string Sub_Cat { get; set; }
public Category()
{ }
}
Я вижу файлы,Storage.db и Storage.db-journal были созданы.Они оба имеют права на запись на диск.Я прочитал, что мне нужно установить теги SQLiteOpenFlags.ReadWrite |SQLiteOpenFlags.Create |SQLiteOpenFlags.FullMutex, но не знаю, как это сделать.Я пытался,
md = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.FullMutex);
, который выдает ошибку.Я также пытался;
md = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path, true);
, который не помогает.Я все еще получаю ошибку ввода-вывода диска.
Из-за того, что я пытался что-то изменить, я изменил строку использования на;
using (SQLite.Net.SQLiteConnection md = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path)) ;
Я не уверен, в чем разница между SQLite.Net.SQLiteConnection и SQLiteConnection, но SQLite.Net.SQLiteConnection закрывает соединение, а SQLiteConnection оставляет его открытым.Так что это была последняя проблема.
Еще одна вещь, которую я поместил в отдельный класс, чтобы он оставался открытым и использовался в любое время в остальной части кода.Это потребовало его удаления из оператора using, чтобы соединение оставалось открытым.
Спасибо за помощь.