2017-02-12 11 views
0

У меня есть этот код для резервного копирования моей базы данных с помощью C#.Резервное копирование на C#: резервное копирование для сервера XXX

Но я получаю Backup Failed for Server ADMIN-PC сообщение об ошибке.

Я могу запустить Backup из 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 для резервного копирования в SQL Server Management Studio? и строку соединения без учетных данных (например, пароль)? И можете ли вы описать свою проблему более подробно?

резервного копирования работа требует глубокого понимания, как работает Sever ..

+0

, который работает спасибо! но как я могу заставить индикатор прогресса работать? – KAKA

+0

Это хорошо. В настоящее время я попытался реализовать SMO, как вы. И я понял, что еще пару лет назад я пробовал этот SMO, но отказался (из-за проблем) из-за проблем с DLL и изменил способ моего ответа выше. Прошло много времени, чтобы завершить резервное копирование? Насколько большой размер базы данных? Если это не займет много времени, и это не большая база данных, достаточно неопределенного прогрессаBar будет достаточно, и вы сможете найти много решений progressBar через Nuget или Github. –

+0

нет очень быстро, размер базы данных очень мал, и я хотел бы добавить текущие данные и время в файл резервной копии – KAKA