我正在制作简单的Windows 10应用程序 - 销售经理。只有3张桌子。我有本地的sqlite数据库。我正在寻找备份此数据库或同步的简便方法。由于数据库很小,我总是考虑完全同步,所以例如:我点击“发送数据库”#39;设备的完整数据发送到服务器。当我点击下载'将下载所有数据库。我将很感激建议只是保存数据库的方法
答案 0 :(得分:0)
恕我直言,您可以利用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,您需要先按照these steps注册OneDrive的应用程序。
要同步本地数据库,您还可以尝试使用Offline Data Sync in Azure Mobile Apps。这比备份数据库更强大。
当您的应用处于离线模式时,用户仍然可以创建和修改数据,这些数据将保存到本地商店。当应用程序重新联机时,它可以将本地更改与Azure Mobile App后端同步。该功能还包括支持在客户端和后端同时更改相同记录时检测冲突。然后可以在服务器或客户端上处理冲突。
脱机同步有许多好处:
- 通过在设备上本地缓存服务器数据来提高应用响应能力
- 创建在网络问题时仍然有用的强大应用
- 即使没有网络访问权限,也允许最终用户创建和修改数据,支持连接很少或没有连接的方案
- 跨多个设备同步数据,并在两台设备修改同一记录时检测冲突
- 限制高延迟或计量网络上的网络使用
有关详细信息,请参阅GitHub中的Offline Data Sync in Azure Mobile Apps,Enable offline sync for your Windows app和Todo offline sample。