2017-02-20 17 views
1

SMOを使用してSQL localDBデータベースをバックアップしようとしていますが、成功しません。 私のコードで何が問題になっていますか?SMOを使用してSQL localDBをバックアップする方法

progressBar.Value = 0; 
SaveFileDialog sfd = new SaveFileDialog(); 
string stringCon = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\whdb.mdf;Integrated Security=True"; 
sfd.Filter = "Database backup files (*.bak)|*.bak"; 
sfd.Title = "Create Database Backup"; 
sfd.FileName = DateTime.Today.ToString("ddMMMyyyy") + ".bak"; 
if (sfd.ShowDialog() == DialogResult.OK) 
{ 
    using (SqlConnection conn = new SqlConnection(stringCon)) 
    { 
     ServerConnection servConn = new ServerConnection(conn); 
     SqlConnection.ClearAllPools(); 
     conn.Open(); 
     servConn.Connect(); 
     try { 
      Server serverdb = new Server(servConn); 
      Backup backupdb = new Backup() { Action = BackupActionType.Database, Database="whdb"}; 
      backupdb.Devices.AddDevice(sfd.FileName, DeviceType.File); 
      backupdb.Initialize = true; 
      backupdb.Incremental = false; 
      backupdb.SqlBackupAsync(serverdb); 
      progressBar.Value = 100; 
      conn.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 
} 

これ、私はそれを実行したときに私が手例外:

「System.InvalidOperationException」種類の未処理の例外がのSystem.Data.dll で発生しました追加情報:は、ExecuteNonQueryはオープンで利用できるが必要です接続。接続の現在の状態は閉じられています。

+1

SqlBackup(例:非同期はありません)はまだ利用可能です - havent見てください - もしそうなら、それはコマンドのライニングの直後に接続を終了している可能性があります – BugFinder

+1

なぜ 'SqlConnection.ClearAllPoolsその例外がスローされますか? (デバッグを簡単にするためにtry/catchを取り除く) – rene

+0

@BugFinderありがとう。私はSqlBackupを使用して、試行後にconnを閉じ、それがうまくいった。 – user7586828

答えて

0

私はこの問題は、あなたがバックグラウンドで実行中のバックアップを開始し

backupdb.SqlBackupAsync(serverdb); 

を使用していることだと思います。しかし、バックアップが実行するまでには、接続を終了しています。

あなたは

backupdb.SqlBackup(serverdb); 

を使用したり、他のあなたの使用と密接削除して、いくつかは、手動でバックアップした後、接続を閉じるようにした見つけることができるのいずれか。

+0

に従って作業してください。また、フルパス+ファイル名ではなくデータベース名を使用しています。 "whdb"を文字列myDatabase = Application.StartupPath + "\\ whdb.mdf"に置き換えました。 – user7586828

関連する問題