Я пытаюсь разработать инструмент для автоматического обновления базы данных с определенной версии на другую, где мне нужно запустить несколько сценариев.
Я могу получить инструмент для запуска сценария и могу получитьрезультаты от этого.Сейчас я пытаюсь получить окно «Сообщения».Я тестирую с помощью простых сценариев только с выборками.
Если я запускаю следующий запрос, который я получаю, "Недопустимое имя объекта" tableDoesNotExist "."ошибка
SELECT * FROM tableDoesNotExist
Но если я запускаю рабочий запрос, я не могу получить сообщение "(затронут 1 строка)"
Вот код, который я тестирую
Private Sub Execute_Query(ByVal fileInfo As BScript, X As SqlClient.SqlConnection)
Dim objRead As New StreamReader(fileInfo.path)
Dim commandobj As New SqlCommand()
commandobj.CommandText = objRead.ReadToEnd()
commandobj.Connection = X
AddHandler X.InfoMessage, New SqlInfoMessageEventHandler(AddressOf InfoMessageHandler)
Try
MessageBox.Show(Convert.ToString(commandobj.ExecuteScalar()))
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Есть ли в ExecuteReader
, ExecuteScalar
или ExecuteNonQuery
какое-либо свойство, чтобы я мог получить затронутые строки для запросов на выборку?
Я НЕ МОГУ ИЗМЕНИТЬСКРИПТЫ
Редактировать: Как указано GSerg , это может быть дубликатом, но я уже использую обработчик, и строка пуста
ВотMessageHandler Sub
Private Sub InfoMessageHandler(sender As Object, e As SqlClient.SqlInfoMessageEventArgs)
stringBuilder.Append(e.Message).AppendLine()
End Sub
И я объявляю stringBuilder как глобальную переменную, подобную этой
Dim stringBuilder As New StringBuilder
Результатом является пустая строка при запуске этого
MessageBox.Show("String Builder: " & stringBuilder.ToString)
То есть у меня нет способа просто получить текст «Сообщения»?
Редактировать 2: В качестве быстрого исправления я использую следующий код
While reader.Read()
rowCount = rowCount + 1
End While
Но явсе еще хотел бы знать, возможно ли получить фактический текст "Сообщения"