Восстановление базы данных с SMO - Отчет о проблемах прогресса - PullRequest
0 голосов
/ 06 июня 2010

Я использую ниже для восстановления базы данных в VB.NET. Это работает, но вызывает блокировку интерфейса, если пользователь нажимает что-либо. Кроме того, я не могу получить индикатор выполнения для постепенного обновления, он пуст до завершения резервного копирования и отображает 100%

Sub DoRestore()
    Dim svr As Server = New Server("Server\SQL2008")
    Dim res As Restore = New Restore()
    res.Devices.AddDevice("C:\MyDB.bak", DeviceType.File)
    res.Database = "MyDB"
    res.RelocateFiles.Add(New RelocateFile("MyDB_Data", "C:\MyDB.mdf"))
    res.RelocateFiles.Add(New RelocateFile("MyDB_Log", "C:\MyDB.ldf"))
    res.PercentCompleteNotification = 1
    AddHandler res.PercentComplete, AddressOf ProgressEventHandler
    res.SqlRestore(svr)
End Sub

Правильно ли это изменение?:

Private Sub ProgressEventHandler(ByVal sender As Object, ByVal e As PercentCompleteEventArgs)
    UpdateProgressBar(e.Percent)
End Sub

Private Sub UpdateProgressBar(ByVal e As String)
    ProgressBar.Value = e
    Status.Text = e.ToString
End Sub

1 Ответ

0 голосов
/ 06 июня 2010

Вам нужно использовать SqlRestoreAsync, а не SqlRestore, чтобы предотвратить связывание вашего основного потока.

Тогда, чтобы избежать ошибки Cross Thread Operation при обновлении интерфейса, вы можете использовать подход здесь . Где вы создаете метод в форме, который будет обновлять элементы интерфейса и вызывать его из вашего асинхронного обработчика, используя Invoke.

...