UWP PreLoaded SQLite

时间:2017-11-14 18:52:12

标签: sqlite uwp windows-store-apps

我正在尝试将预加载的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);
        }
    }

我没有收到任何错误消息。

2 个答案:

答案 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); 
}