在PublisherCacheFolder

时间:2018-08-07 11:19:58

标签: c# sqlite uwp

对于我的示例Uwp应用程序,我想在Publisher缓存文件夹的SqLightDataBase中创建sqlite db,例如: C:\ Users \\ AppData \ Local \ Publishers \ temp_folder \ SqLightDataBase,因为我希望从同一发布者处复制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:“无法打开数据库文件”。

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

1 个答案:

答案 0 :(得分:0)

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