Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Все поставщики данных .NET Framework имеют Connection объекты с двумя событиями, которые можно использовать для получения информационных сообщений из источника данных или для определения того, изменилось ли состояние Connection . В следующей 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 возникает при изменении состояния Connection . Событие StateChange получает StateChangeEventArgs, что позволяет определить изменение состояния Connection с помощью свойств OriginalState и CurrentState. Свойство OriginalState — это перечисление ConnectionState, которое указывает состояние Connection до его изменения.
CurrentState — это перечисление ConnectionState , указывающее состояние Connection после изменения.
В следующем примере кода событие StateChange используется для записи сообщения в консоль, когда изменяется состояние Connection.
' 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);
}