2017-02-12 150 views
0

我有這個代碼來備份我的數據庫使用C#。C#備份:服務器XXX備份失敗

但我得到Backup Failed for Server ADMIN-PC錯誤消息。

我可以從SQL Server Management Studio運行備份,但從這裏出於某種原因它給了我這個錯誤。

我該如何做這項工作?

private void btnBackup_Click(object sender, EventArgs e) 
    { 
     progressBar1.Value = 0; 

     try 
     { 
      Server dbServer = new Server(new ServerConnection(txtServer.Text, txtUserName.Text, txtPassword.Text)); 
      Backup dbBackup = new Backup() {Action = BackupActionType.Database, Database = txtDatabase.Text}; 
      dbBackup.Devices.AddDevice(@"C:\PDM.bak", DeviceType.File); 
      dbBackup.Initialize = true; 
      dbBackup.PercentComplete += DbBackup_PercentComplete; 
      dbBackup.PercentComplete += DbBackup_Complete; 
      dbBackup.SqlBackupAsync(dbServer); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Message ", MessageBoxButtons.OK, MessageBoxIcon.Error); 


     } 

    } 
    private void DbBackup_Complete(object sender, ServerMessageEventArgs e) 
    { 
     if (e.Error != null) 
     { 
      label5.Invoke((MethodInvoker)delegate 
      { 
       lblStatus.Text = e.Error.Message; 
      }); 
     } 

    } 
    private void DbBackup_PercentComplete(object sender, PercentCompleteEventArgs e) 
    { 
     progressBar1.Invoke((MethodInvoker)delegate 
     { 
      progressBar1.Value = e.Percent; 
      progressBar1.Update(); 


     }); 
     label5.Text = $"{e.Percent}%"; 
    } 
} 
+1

檢查你得到的異常是否有更多的細節 – NineBerry

回答

1

這是所有異常消息嗎?只嘗試沒有進度條的備份工作,看看拋出了什麼異常。沒有全貌,這裏的人無法幫到你。

你只需要使用這種方式進行備份?

這是我的代碼備份數據庫供您參考。

using (SqlConnection masterdbConn = new SqlConnection()) 
{ 
    masterdbConn.ConnectionString = localmasterConnectionString; 
    masterdbConn.Open(); 

     using (SqlCommand rollback_dbcomm = new SqlCommand()) 
     { 
      rollback_dbcomm.Connection = masterdbConn; 
      rollback_dbcomm.CommandText = "ALTER DATABASE mydbname SET MULTI_USER WITH ROLLBACK IMMEDIATE"; 

      rollback_dbcomm.ExecuteNonQuery(); 
     } 
     masterdbConn.Close(); 
} 

SqlConnection.ClearAllPools(); 

using (SqlConnection backupConn = new SqlConnection()) 
{ 
    backupConn.ConnectionString = localConnectionString; 
    backupConn.Open(); 

    using (SqlCommand backupcomm = backupConn.CreateCommand()) 
    { 
      backupcomm.CommandText = @"BACKUP DATABASE mydbname TO DISK='c:\mydbname.bak'"; 

      backupcomm.ExecuteNonQuery(); 
    } 
    backupConn.Close(); 
} 

ALTER DATABASE回滾立即命令完成所有數據庫中的未完成的事務,讓我們說「手離開從數據庫中準備好備份。

而且你需要檢查在ConnectionString中的角色和權限..

你能告訴在SQL Server Management Studio中的SQL語法備份?和連接字符串沒有憑據(如密碼)? 你能更詳細地描述你的問題嗎?

備份工作需求的深刻理解Sever的如何運作..

+0

內部異常的作品謝謝!但我怎樣才能讓進度條工作? – KAKA

+0

這很好。我已經在這個時候嘗試過與SMO一起實施。而且我意識到我多年前也嘗試過這種SMO方式,但由於DLL問題而放棄(失敗),並改爲上述答案的方式。完成備份需要很長時間嗎?數據庫大小有多大?如果它不需要很長時間並且不是很大的數據庫,只需要確定progressBar就足夠了,並且可以通過Nuget或Github找到許多progressBar解決方案。 –

+0

沒有它非常快,數據庫大小非常小,我想添加當前的數據和時間在備份文件名 – KAKA