同步文件正在使用中

时间:2014-03-11 21:55:24

标签: c# visual-studio sqlite microsoft-metro windows-store-apps

我想在数据库管理器程序中使用自动同步功能。如果已更改,则自动同步会自动将数据库文件上载到云。

我的问题是,数据库总是使用数据库文件,而上传方法无法访问该文件。

代码:

文件名是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寻求帮助或任何建议!

1 个答案:

答案 0 :(得分:0)

这在空间方面可能不太理想,但您可以创建两个数据库文件。一个in-use,一个at-rest

在每次写入(或写入一组)之后,将in-use复制到at-rest上,然后再将更多条目写入数据库。您可能需要断开连接,然后在复制后重新连接。这应该是一个非常快速的操作(比上传快得多)。

然后,当您需要上传时,从at-rest版本流式传输。

您需要锁定at-rest的读/写,但至少您可以读取/写入in-use,而不受互联网连接的限制。