上传到SkyDrive后“无法打开数据库文件”

时间:2013-10-01 19:16:03

标签: c# sqlite windows-phone-7 isolatedstorage live-sdk

我有一个使用SQLite数据库的WP7应用程序。该应用程序的一项功能是备份到SkyDrive,它工作正常,但之后我的应用程序抛出“无法打开数据库文件”。如果我稍等一下(10到60秒之间),它将再次开始工作。我不知道问题是关于Live SDK,IsolatedStorage还是其他问题,但在上传完成后,我觉得该文件仍然存在问题。 (对于它的价值,我不认为它严格来说是SQLite错误。)

我正在使用以下代码(为简洁而编辑):

private void Upload() {
    this._LiveClient.UploadProgressChanged += UploadProgressChanged;
    this._LiveClient.UploadCompleted += UploadCompleted;

    IsolatedStorageFileStream stream = null;

    try {
        using( IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication() ) {
            stream = store.OpenFile( "mydatabasefile.dat", FileMode.Open, FileAccess.Read );
        }

        this._LiveClient.UploadAsync( "DestinationPath", "DestinationFilename.sqlite", true, stream, null );
    } catch( Exception e ) {
        MessageBox.Show( e.Message, "Error", MessageBoxButton.OK );
    }
}

private void UploadCompleted( object sender, LiveOperationCompletedEventArgs e ) {
    if( e.Error == null ) {
        MessageBox.Show( "File successfully uploaded.", "Backup", MessageBoxButton.OK );
        if( this.NavigationService.CanGoBack ) this.NavigationService.GoBack();
    } else {
        MessageBox.Show( e.Error.Message, "Upload Error", MessageBoxButton.OK );
    }
}

导航回来后(这将永远是我的主页),我尝试做的任何事情都需要数据库访问(例如导航到我的视图页面并显示记录)会引发错误(再次,直到我等一下)

我不确定我是否需要某处的Close语句,或者甚至只是一个循环检查文件的状态,直到它关闭,或者是什么。

1 个答案:

答案 0 :(得分:0)

您需要做的是在UploadCompleted中添加stream.Dispose();,这应该可以解决您的问题(唯一要记住的是,如果您需要,您将无法在上传过程中访问数据库为此,您还需要在上传之前创建Db文件的副本。)