【发布时间】:2019-01-14 11:17:11
【问题描述】:
对于我的示例 Uwp 应用程序,我想在 Publisher Cache 文件夹中的 SqLightDataBase 中创建 sqlite db,例如: C:\Users\\AppData\Local\Publishers\temp_folder\SqLightDataBase,因为我希望来自同一个 Publisher 的多个 uwp 应用程序能够使用它。 我指的是:
- https://blogs.windows.com/buildingapps/2017/02/06/using-sqlite-databases-uwp-apps/#vyPW3Qg7IwfWxchx.97
- https://docs.microsoft.com/en-us/windows/uwp/data-access/sqlite-databases#use-data
- https://blogs.windows.com/buildingapps/2016/05/24/sharing-your-local-app-data/#bFwwp4tUPHe0OwDj.97
- https://github.com/aspnet/Microsoft.Data.Sqlite/wiki/Connection-Strings
根据上述: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>
解决方案有两个项目:
- 通用 Windows 类库
- 通用 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会导致这个问题? -
是的,没错。
-
如果你已经解决了你的问题。您可以在下面发布您的答案并接受它。