2017-01-03 10 views
0

Я пытаюсь восстановить резервную копию базы данных SQL с помощью этого кодаВосстановление базы данных SQL Server с помощью C#

private void btnRestore_Click(object sender, EventArgs e) 
{ 
    string dbName = "BakodahDB"; 
    try 
    { 
     Server dbServer = new Server(); //local using windows athuentication 
     Restore dbRestore = new Restore() { Database = dbName, Action = RestoreActionType.Database, ReplaceDatabase = true, NoRecovery = false }; 
     dbRestore.Devices.AddDevice(@"C:\WorkHours\dbBackup.bak", DeviceType.File); 
     dbRestore.PercentComplete += DbRestore_PercentComplete; 
     dbRestore.Complete += DbRestore_Complete; 
     dbRestore.SqlRestoreAsync(dbServer); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

Когда я нажмите происходит на кнопку ничего, даже не сообщение об ошибке ... Что такое правильный способ сделай это?

+1

Возможный дубликат [Восстановление базы данных с использованием C#] (http://stackoverflow.com/questions/6943137/restoring-a-db-using-c-sharp) – MethodMan

+0

Для дальнейшей помощи у меня есть пара вопросов. Вы пробовали переместить 'dbRestore' в более широкий диапазон, например класс? Как выглядят реалии ваших делегатов «DbRestore_PercentComplete» и «DbRestore_Complete»? Возможно ли, что работа продлится долго? – Cameron

+0

Попробуйте не-асинхронную версию; это бросает? В качестве альтернативы можно обработать событие ['Information'] (https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.backuprestorebase.information.aspx) - что-либо сообщалось? – Blorgbeard

ответ

2

мне просто нужно, чтобы убить весь процесс до восстановления

  // Kill all processes 
      dbServer.KillAllProcesses(dbRestore.Database); 
      // Set single-user mode 
      Database db = dbServer.Databases[dbRestore.Database]; 
      // db.DatabaseOptions.UserAccess=true; 
      db.Alter(TerminationClause.RollbackTransactionsImmediately); 
      // Detach database 
      dbServer.DetachDatabase(dbRestore.Database, false); 

это сработало!