数据库同步/备份- Windows 10移动版

本文关键字:移动 Windows 同步 备份 数据库 | 更新日期: 2023-09-27 17:55:04

我正在制作简单的windows 10应用程序-销售经理。只有3张桌子。我有本地sqlite数据库。我正在寻找一种简单的方法来备份这个数据库或同步。因为数据库很小,所以我总是考虑完全同步,例如:我点击"发送数据库",从设备发送到服务器的完整数据。当我点击"下载"所有数据库将被下载。我将感激的建议简单的方法来保存数据库

数据库同步/备份- Windows 10移动版

恕我直言,你可以利用OneDrive的应用文件夹来备份你的SQLite数据库。

App Folder是一个专用的、特殊的应用文件夹。应用文件夹通常以你的应用命名,在用户OneDrive的Apps文件夹中找到。如果你请求onedrive.appfolder权限范围,用户授权它,你的应用程序读取和写入访问这个文件夹。

对于c#,您可以在应用程序中使用OneDrive SDK for CSharp。例如,您可以像这样发送数据库文件:

private async Task<Item> UploadDBFile()
{
    StorageFile DBFile = await ApplicationData.Current.LocalFolder.GetFileAsync("db.sqlite");
    var oneDriveClient = await OneDriveClientExtensions.GetAuthenticatedUniversalClient(new[] { "onedrive.appfolder" });
    using (var contentStream = await DBFile.OpenStreamForReadAsync())
    {
        return await oneDriveClient.Drive.Special.AppRoot.ItemWithPath("backup.sqlite").Content.Request().PutAsync<Item>(contentStream);
    }
}

下载db如下:

private async Task DownloadDBFile()
{
    var oneDriveClient = await OneDriveClientExtensions.GetAuthenticatedUniversalClient(new[] { "onedrive.appfolder" });
    using (var contentStream = await oneDriveClient.Drive.Special.AppRoot.ItemWithPath("backup.sqlite").Content.Request().GetAsync())
    {
        StorageFile downloadedFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("DownloadedDB.sqlite",
CreationCollisionOption.ReplaceExisting);
        using (var writerStream = await downloadedFile.OpenStreamForWriteAsync())
        {
            contentStream.CopyTo(writerStream);
        }
    };
}

请注意,要在应用程序中使用OneDrive API,您需要首先按照以下步骤注册OneDrive应用程序。

要同步本地数据库,您还可以尝试在Azure移动应用程序中使用离线数据同步。这比备份数据库更强大。

当你的应用处于离线模式时,用户仍然可以创建和修改数据,这些数据将被保存到本地存储。当应用程序重新联机时,它可以与Azure移动应用程序后端同步本地更改。该特性还支持在客户端和后端同时更改同一记录时检测冲突。冲突可以在服务器端或客户端处理。

离线同步有很多好处:

  • 通过在设备上本地缓存服务器数据来提高应用程序的响应能力
  • 创建健壮的应用程序,当有网络问题时仍然有用
  • 允许最终用户在没有网络访问的情况下创建和修改数据,支持很少或没有连接的场景
  • 跨多个设备同步数据,并在两个设备修改同一记录时检测冲突
  • 限制在高延迟或计量网络上使用网络

有关更多信息,请参阅Azure移动应用中的离线数据同步,为您的Windows应用启用离线同步,以及GitHub中的Todo离线示例。