Это работает в VB.NET 2005, не уверен насчет 1.1.
Я знаю, что вы проделали кучу работы над COM-взаимодействием, но не могли бы вы просто использовать информационные события вне вашего соединения
Обратите внимание на STATS = 10 .. это означает, что вы будете получать уведомления о прогрессе каждые 10%
это просто фрагмент проекта, над которым я работал, надеюсь, вы сможете получить от него все, что вам нужно.
public sub Backup()
Dim Conn As SqlClient.SqlConnection
dim theCommand as SqlClient.SQLCommand
Conn = New SqlClient.SqlConnection("Data Source=.\MyInstance;Initial Catalog=Master;Integrated Security=SSPI;")
theCommand = Conn.CreateCommand
theCommand.CommandText = "BACKUP DATABASE [MyDatabase] TO DISK = '" & mDatabasePath & "\" & Filenames.SQLBackup & "' WITH NOFORMAT, INIT, NAME = 'MyDatabase-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
AddHandler Conn.InfoMessage, AddressOf onSqlInfoMessage
'make sure the events are fired as they are available, instead of at the end.
Conn.FireInfoMessageEventOnUserErrors = True
Conn.Open()
theCommand.ExecuteNonQuery()
RemoveHandler Conn.InfoMessage, AddressOf onSqlInfoMessage
Conn.Close()
end sub
Private Sub onSqlInfoMessage(ByVal sender As Object, ByVal args As SqlClient.SqlInfoMessageEventArgs)
If args.Message.EndsWith("percent processed.") Then
Dim theMatch As System.Text.RegularExpressions.Match
theMatch = mRegEx.Match(args.Message)
debug.print("Progress = " & theMatch.Value.Trim)
End If
End Sub