Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Все поставщики данных .NET Framework имеют объекты Connection с двумя событиями, которые можно использовать для получения информационных сообщений из источника данных или для определения того, изменилось ли состояние подключения . В следующей таблице описываются события объекта Connection .
Событие | Описание |
---|---|
ИнформационноеСообщение | Происходит, когда информационное сообщение возвращается из источника данных. Информационные сообщения — это сообщения из источника данных, которые не приводят к возникновению исключения. |
Изменение состояния | Происходит при изменении состояния подключения . |
Работа с событием InfoMessage
Предупреждения и информационные сообщения можно получить из источника данных SQL Server с помощью InfoMessage события SqlConnection объекта. Ошибки, возвращаемые из источника данных с уровнем серьезности от 11 до 16, вызывают исключение. InfoMessage Однако событие можно использовать для получения сообщений из источника данных, которые не связаны с ошибкой. В случае Microsoft SQL Server любая ошибка с серьезностью 10 или меньше считается информационным сообщением и может быть записана с помощью InfoMessage события. Дополнительные сведения см. в статье о серьезности ошибок ядра СУБД .
Событие InfoMessage принимает объект SqlInfoMessageEventArgs, содержащий в своем свойстве Errors коллекцию сообщений из источника данных. Об объектах Error в этой коллекции можно получить информацию, такую как номер ошибки, текст сообщения, а также источник ошибки. Поставщик данных .NET Framework для SQL Server также содержит сведения о базе данных, хранимой процедуре и номере строки, из которых поступило сообщение.
Пример
В следующем примере кода показано, как добавить обработчик событий для InfoMessage события.
' Assumes that connection represents a SqlConnection object.
AddHandler connection.InfoMessage, _
New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)
Private Shared Sub OnInfoMessage(sender As Object, _
args As SqlInfoMessageEventArgs)
Dim err As SqlError
For Each err In args.Errors
Console.WriteLine("The {0} has received a severity {1}, _
state {2} error number {3}\n" & _
"on line {4} of procedure {5} on server {6}:\n{7}", _
err.Source, err.Class, err.State, err.Number, err.LineNumber, _
err.Procedure, err.Server, err.Message)
Next
End Sub
// Assumes that connection represents a SqlConnection object.
connection.InfoMessage +=
new SqlInfoMessageEventHandler(OnInfoMessage);
protected static void OnInfoMessage(
object sender, SqlInfoMessageEventArgs args)
{
foreach (SqlError err in args.Errors)
{
Console.WriteLine(
"The {0} has received a severity {1}, state {2} error number {3}\n" +
"on line {4} of procedure {5} on server {6}:\n{7}",
err.Source, err.Class, err.State, err.Number, err.LineNumber,
err.Procedure, err.Server, err.Message);
}
}
Обработка ошибок как информационных сообщений
Обычно InfoMessage событие будет запускаться только для информационных и предупреждающих сообщений, отправляемых с сервера. Однако при возникновении фактической ошибки выполнение метода ExecuteNonQuery или ExecuteReader , инициируемого операцией сервера, останавливается и возникает исключение.
Если вы хотите продолжить обработку остальных операторов в команде независимо от любых ошибок, созданных сервером, задайте свойству объекта FireInfoMessageEventOnUserErrorsSqlConnection значение true
. Это приводит к тому, что подключение вызывает событие InfoMessage при возникновении ошибок, вместо того чтобы вызывать исключение и прерывать обработку. Клиентское приложение может обрабатывать это событие и реагировать на ошибки.
Замечание
Ошибка с уровнем серьезности 17 или выше, которая приводит к остановке обработки команды сервером, должна обрабатываться как исключение. В этом случае исключение возникает независимо от способа обработки ошибки в событии InfoMessage .
Работа с событием StateChange
Событие StateChange возникает при изменении состояния подключения . Событие StateChange получает StateChangeEventArgs , позволяющее определить изменение состояния подключения с помощью свойств OriginalState и CurrentState . Свойство OriginalState — это ConnectionState перечисление, указывающее состояние подключения перед изменением. CurrentState — это ConnectionState перечисление, указывающее состояние подключения после его изменения.
В следующем примере кода событие StateChange используется для записи сообщения в консоль при изменении состояния подключения .
' Assumes connection represents a SqlConnection object.
AddHandler connection.StateChange, _
New StateChangeEventHandler(AddressOf OnStateChange)
Protected Shared Sub OnStateChange( _
sender As Object, args As StateChangeEventArgs)
Console.WriteLine( _
"The current Connection state has changed from {0} to {1}.", _
args.OriginalState, args.CurrentState)
End Sub
// Assumes connection represents a SqlConnection object.
connection.StateChange += new StateChangeEventHandler(OnStateChange);
protected static void OnStateChange(object sender,
StateChangeEventArgs args)
{
Console.WriteLine(
"The current Connection state has changed from {0} to {1}.",
args.OriginalState, args.CurrentState);
}