我想在数据库管理器程序中使用自动同步功能。如果已更改,则自动同步会自动将数据库文件上载到云。
我的问题是,数据库总是使用数据库文件,而上传方法无法访问该文件。
代码:
文件名是main.db
使用insert和BackgroundUploadAsync方法
public static async void InsertToDatabase(object data)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection("Main.db");
await conn.InsertAsync(data);//i cant close the file in async methode
}
public async static void AutoSync()
{
....
if (file != null)
{
var progressHandler = new Progress<LiveOperationProgress>(
(progress) => { /*pr.Value = progress.ProgressPercentage;*/ });
SettingsFlyout1.ctsUpload = new System.Threading.CancellationTokenSource();
LiveConnectClient liveClient = new LiveConnectClient(app.Session);
await liveClient.BackgroundUploadAsync(result, file.Name, file, OverwriteOption.Overwrite, SettingsFlyout1.ctsUpload.Token, progressHandler);
}
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
InsertToDatabase(adat);
AutoSync();//file not found exception,
}
Thanx寻求帮助或任何建议!
答案 0 :(得分:0)
这在空间方面可能不太理想,但您可以创建两个数据库文件。一个in-use
,一个at-rest
。
在每次写入(或写入一组)之后,将in-use
复制到at-rest
上,然后再将更多条目写入数据库。您可能需要断开连接,然后在复制后重新连接。这应该是一个非常快速的操作(比上传快得多)。
然后,当您需要上传时,从at-rest
版本流式传输。
您需要锁定at-rest
的读/写,但至少您可以读取/写入in-use
,而不受互联网连接的限制。