sqlite - 数据库同步/ bakup - Windows 10手机
问题描述:
我只是在做Windows 10 apllication - 销售经理。只有3张桌子。我有本地的SQLite数据库。我正在寻找简单的方法来备份这个数据库或进行同步。由于databae很小,我总是想到完全同步,因此,例如:我点击“发送数据库”,并将设备发送的所有数据发送到服务器。当我点击'下载'时,所有数据库将被下载。我会很感激的建议,简单的方法来保存数据库sqlite - 数据库同步/ bakup - Windows 10手机
答
限制网络使用欲了解更多信息,请参阅Offline Data Sync in Azure Mobile Apps,Enable offline sync for your Windows app,并在GitHub上的Todo offline sample。
恕我直言,你可以利用OneDrive's App Folder来备份你的SQLite数据库。
该应用程序文件夹是一个专用的,特殊的文件夹为您的应用程序。应用程序文件夹通常以您的应用程序命名,并位于用户的OneDrive中的文件夹中。如果您请求
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);
}
}
,并下载该数据库,如:
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通过以下these steps。
要同步本地数据库,您还可以使用Offline Data Sync in Azure Mobile Apps进行尝试。这比备份数据库更强大。
当您的应用程序处于离线模式时,用户仍然可以创建和修改数据,并将其保存到本地商店。当应用程序重新联机时,它可以与Azure移动应用程序后端同步本地更改。该功能还包括支持在客户端和后端更改相同记录时检测冲突。然后可以在服务器或客户端上处理冲突。
离线同步有很多好处:
- 通过本地缓存设备上的服务器数据
- 创建强大的应用程序时,有网络问题
- 允许最终用户仍然存在有用提高应用程序的响应在没有网络访问的情况下创建和修改数据,支持极少或没有连接的情况
- 跨多个设备同步数据,并在两个设备修改相同记录时检测冲突
在高延迟或流量计费的网络
这是一个意见,但实际上如此小的数据是没有意义的做一个同步过程,只更新更改的数据 – Steve