我有一个使用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语句,或者甚至只是一个循环检查文件的状态,直到它关闭,或者是什么。
答案 0 :(得分:0)
您需要做的是在UploadCompleted中添加stream.Dispose();
,这应该可以解决您的问题(唯一要记住的是,如果您需要,您将无法在上传过程中访问数据库为此,您还需要在上传之前创建Db文件的副本。)