我正在尝试将预加载的SQLite数据库复制到我的UWP应用程序中。在初始安装时,它复制“test.db”,但大小为0字节,没有表或数据。原始数据库是1300字节的数据和表。
另一个事实......当我创建应用程序时使用Visual Studio 2017并编译并运行/调试应用程序它工作正常,但是当我侧载appx文件或从Windows应用商店下载时,数据库为空。
以下是我正在使用的代码:
Task task = CopyDatabase();
private async Task CopyDatabase()
{
bool isDatabaseExisting = false;
try
{
StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync("Express.db");
isDatabaseExisting = true;
}
catch
{
isDatabaseExisting = false;
}
if (!isDatabaseExisting)
{
StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("Express.db");
await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder, "Express.db", NameCollisionOption.ReplaceExisting);
}
}
我没有收到任何错误消息。
答案 0 :(得分:1)
您的数据库文件是否已正确部署到目标系统? 要确认它,请参阅已部署的“包” - 文件夹。打开带有管理优先权的命令提示符,并查看目录
c:\ Program Files \ WindowsApps \ your-app-id
如果您的数据库文件已成功部署,则可以在目录中看到它。如果没有,您可能需要更改部署设置。
要将文件部署到目标计算机,您应该将该属性设置为...
'BuildAction的含量='
'复制到输出目录'='始终复制'
您可以从解决方案资源管理器中进行设置,然后右键单击您的数据库文件。
如果您成功部署了文件,您的代码会将数据库文件复制到app本地文件夹。
C:\ Users \您的USER-ID \应用程序数据\本地\软件包\ YOUR-APP-ID \ LocalState
答案 1 :(得分:0)
首先,您需要对await
方法使用CopyDatabase
。
其次,我建议你在MainPage_Loaded
事件处理程序而不是MainPage的构造函数中调用此方法。
public MainPage()
{
this.InitializeComponent();
this.Loaded += MainPage_Loaded;
}
private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
gui = this; InitializeComponent();
await CopyDatabase();
DataSetup();
CreateNewChartButton.Visibility = Visibility.Collapsed;
SignInButton_Click(null, null);
}