0

我有一个使用 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 语句,甚至只是一个循环检查文件的状态直到它关闭,或者什么。

4

1 回答 1

0

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

于 2013-10-02T12:36:51.863 回答