C# 正在使用同步文件
我想在数据库管理程序中使用自动同步功能。如果数据库文件被更改,自动同步会自动将其上载到云 我的问题是,数据库总是使用数据库文件,而上传方法无法访问该文件 守则: 文件名为main.db 在insert和BackgroundUploadAsync方法中使用C# 正在使用同步文件,c#,visual-studio,sqlite,microsoft-metro,windows-store-apps,C#,Visual Studio,Sqlite,Microsoft Metro,Windows Store Apps,我想在数据库管理程序中使用自动同步功能。如果数据库文件被更改,自动同步会自动将其上载到云 我的问题是,数据库总是使用数据库文件,而上传方法无法访问该文件 守则: 文件名为main.db 在insert和BackgroundUploadAsync方法中使用 public static async void InsertToDatabase(object data) { SQLiteAsyncConnection conn = new SQLiteAsy
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,
}
公共静态异步void InsertToDatabase(对象数据)
{
SQLiteAsyncConnection conn=新的SQLiteAsyncConnection(“Main.db”);
wait conn.InsertAsync(data);//我无法用异步方法关闭文件
}
公共异步静态void AutoSync()
{
....
如果(文件!=null)
{
var progressHandler=新进度(
(progress)=>{/*pr.Value=progress.ProgressPercentage;*/});
setingsflyout1.ctsUpload=new System.Threading.CancellationTokenSource();
LiveConnectClient liveClient=新的LiveConnectClient(app.Session);
等待liveClient.BackgroundUploadAsync(结果、文件名、文件、OverwriteOption.Overwrite、设置fLyout1.ctsUpload.Token、progressHandler);
}
}
专用异步无效按钮\u单击(对象发送方,路由目标)
{
插入数据库(adat);
AutoSync();//未找到文件异常,
}
谢谢您的帮助或任何建议这在空间方面可能并不理想,但您可以创建两个数据库文件。一个
在用
,一个在休息
每次写入(或一组写入)后,将使用中的复制到静止的上,然后再将更多条目写入数据库。您可能需要断开连接,然后在复制后重新连接。这应该是一个非常快速的操作(比上传要快得多)
然后,当您需要上传时,从静止的版本流式传输
您需要在静止时对进行读/写锁定
,但至少可以在不受internet连接限制的情况下对正在使用的进行读/写操作