【问题标题】:Create Sqlite db in PublisherCacheFolder在 PublisherCacheFolder 中创建 Sqlite 数据库
【发布时间】:2019-01-14 11:17:11
【问题描述】:

对于我的示例 Uwp 应用程序,我想在 Publisher Cache 文件夹中的 SqLightDataBase 中创建 sqlite db,例如: C:\Users\\AppData\Local\Publishers\temp_folder\SqLightDataBase,因为我希望来自同一个 Publisher 的多个 uwp 应用程序能够使用它。 我指的是:

根据上述:sqlite 文件“在第一次调用时动态创建,并存储在应用程序的本地数据存储中。” 我的示例代码:

string path = string.Empty;

        try
        {
            path = Path.Combine(ApplicationData.Current.GetPublisherCacheFolder("SqLightDataBase").Path, "sqliteSample.db");                
        }
        catch (Exception e)
        {
            Console.WriteLine(e.InnerException);
        }

        var sqliteConnectionString = "DataSource=" + path;

        using (SqliteConnection db = new SqliteConnection(sqliteConnectionString))
        {
            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();
        }

Package.appmanifest

<Extension Category="windows.publisherCacheFolders">
  <PublisherCacheFolders>
    <Folder Name="SqLightDataBase"/>
  </PublisherCacheFolders>
</Extension>

解决方案有两个项目:

  1. 通用 Windows 类库
  2. 通用 Windows 应用程序

两者都针对 Win 10 版本 1803,以及最小的 Win 10 Creators Update

Nuget 包:

  • Microsoft.Data.Sqlite 1.1.1
  • Microsoft.NETCore.UniversalWindowsPlatform 6.1.7

错误 当尝试db.Open(); 我得到:

SQLite 错误 14:“无法打开数据库文件”。

我尝试在打开它之前创建一个 db 文件,但当前 API 不提供此选项。我也可以将 db 文件从本地复制到 Publisher 文件夹,但这不是理想的解决方案。 有什么方法可以强制 SqliteConnection 在 PublisherCacheFolder 中创建数据库文件,而不是在本地“即时”创建数据库文件?

【问题讨论】:

  • 同样的代码在我这边工作,这是code sample,请检查是否有其他问题导致此问题,例如操作系统问题。
  • 我做了和你一样的项目,是的,它有效。我开始测试它。当我删除 SqLightDataBase 并再次运行应用程序时,该文件夹尚未创建。所以我手动创建了 SqLightDataBase 文件夹。再次运行,得到同样的错误。最后,我比较了两个新文件夹(手动创建)和旧文件夹(在 Bin 中),我发现新文件夹没有与应用程序相关的用户 ID,没有权限在该文件夹上工作。总而言之,我不应该删除旧的 SqLightDataBase 文件夹。
  • 您的意思是删除旧的SqLightDataBase 会导致这个问题?
  • 是的,没错。
  • 如果你已经解决了你的问题。您可以在下面发布您的答案并接受它。

标签: c# sqlite uwp


【解决方案1】:

我通过将 SqLightDataBase 文件夹(对我的示例 UWP 应用程序具有所有权限)从 bin 恢复到 PublisherCacheFolder 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2013-02-03
    • 1970-01-01
    • 2011-01-26
    • 2014-04-07
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多