Невозможно открыть файл базы данных SQLite из локального хранилища данных приложения UWP - PullRequest
0 голосов
/ 16 октября 2019

Я использую этот раздел этого официального руководства по MSDN: Использование базы данных SQLite в приложении UWP , но я получаю следующую ошибку:

ЗАМЕЧАНИЕ : Есть много онлайн-сообщений, связанных (или похожих) с этой проблемой, но, похоже, ни одно из них не имеет решения. Большинству этих постов несколько лет, поэтому я подумал, что этот вопрос уже решен. Кроме того, вышеупомянутое руководство использует также проект библиотеки классов .NET Standard . И онлайн-сообщения по этой проблеме не имеют отношения .NET Standard. Итак, мне было интересно, если проблема вызвана использованием библиотеки .NET Standard. В любом случае, решение будет высоко оценено.

Ошибка SQLite 14: «невозможно открыть файл базы данных»

Ошибка возникает пристрока db.Open () из этот код :

public static void InitializeDatabase()
{
    using (SqliteConnection db =
        new SqliteConnection("Filename=sqliteSample.db"))
    {
        db.Open();

        String tableCommand = "CREATE TABLE IF NOT " +
            "EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY, " +
            "Text_Entry NVARCHAR(2048) NULL)";

        SqliteCommand createTable = new SqliteCommand(tableCommand, db);

        createTable.ExecuteReader();
    }
}

ПРИМЕЧАНИЯ:

  1. Строка чуть ниже приведенного кода гласит: This code creates the SQLite database and stores it in the application's local data store. Это означает, что приложение должно иметь доступ к этому локальному хранилищу данных.
  2. Я использую последнюю версию 16.3.5 из VS2019 для Windows 10. Целевая версия проекта выбрана как Windows 10 1903, а минимальная версия - как Windows 10 1903

ОБНОВЛЕНИЕ

  1. Этому официальному лицу 3 года образец работает нормально. Таким образом, проблема, похоже, связана с более новыми версиями .NET Core. Но мне нужно использовать последнюю версию .NET Core для других функций, которые использует мое приложение, которых нет в более старых версиях.
  2. Я также пробовал этот аналогичный старый учебник, но в новой версии * этого не было1052 * тоже работает - выдает точно такую ​​же ошибку.
  3. Старая проблема, о которой сообщалось в 2016 году здесь до Microsoft, похоже, снова всплыла с новой версией .NET Core.

1 Ответ

1 голос
/ 17 октября 2019

Это недоразумение, SqliteConnection db = new SqliteConnection("Filename=sqliteSample.db") не может создать файл Sqlite, но получить доступ к существующему файлу базы данных Sqlite по пути.

Так что вам нужно создать действительный файл sqliteSample.db ипоместите его в корневой каталог проекта UWP. Выберите content в Свойства -> Операция сборки , чтобы убедиться, что оно будет загружено в каталог приложения.

Обновление

Сначала создайте файл sqliteSample.db в LocalFolder.

await ApplicationData.Current.LocalFolder.CreateFileAsync("sqliteSample.db", CreationCollisionOption.OpenIfExists);

Затем используйте путь для доступа к файлу базы данных

string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
using (SqliteConnection db =
    new SqliteConnection($"Filename={path}"))
{
    // ...
}

С уважением.

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