首页 > 解决方案 > 无法从 UWP 应用的本地数据存储中打开 SQLite 数据库文件

问题描述

我正在使用这个官方 MSDN 教程的这一部分:UWP 应用程序中使用 SQLite 数据库,但出现以下错误:

备注:有许多与此问题相关(或类似)的在线帖子,但似乎没有一个解决方案。这些帖子中的大多数都是几年前的,所以我认为这个问题现在已经解决了。此外,上面提到的教程也是使用.NET 标准类库项目。而关于这个问题的网上帖子也没有.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.5VS2019on Windows 10。项目上的目标版本选择为Windows 10 1903,最小版本为Windows 10 1903

更新

  1. 这个类似的官方 3 岁样本工作正常。因此,问题似乎与较新版本的.NET Core. 但我需要使用最新版本的 .NET Core 来实现我的应用程序正在使用的其他旧版本中不可用的功能。
  2. 我也尝试了这个类似的旧教程,但它也没有在新版本的.NET Core工作上 - 给出完全相同的错误。
  3. 2016 年在这里报告的旧问题似乎Microsoft在新版本的 .NET Core 中再次出现。

标签: sqliteuwp

解决方案


这是一个误区,SqliteConnection db = new SqliteConnection("Filename=sqliteSample.db")不能创建Sqlite文件,而是通过路径访问已有的Sqlite数据库文件。

所以你需要创建一个有效的sqliteSample.db文件,并将它放在UWP项目的根目录下。contentProperties -> Build 操作中选择,以确保将其加载到应用程序目录中。

更新

请先创建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}"))
{
    // ...
}

此致。


推荐阅读