powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Raiserror и ADO.NET (поймать сообщение)
8 сообщений из 8, страница 1 из 1
Raiserror и ADO.NET (поймать сообщение)
    #32512913
Фотография Hermitap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код где DataAdapter пытается заполнить DataTable
однако, сохраненка в определенном случае невыполнит запрос а вернет raiserror.

Так вот, как сделать так чтобы приложение перехватило этот raiserror и вывело сообщение.?
В Delphi а ADO,BDE это сообщение прекрасно выводилось. А вот в Ado.net я незнаю как это сделать.


Спасибо.
...
Рейтинг: 0 / 0
Raiserror и ADO.NET (поймать сообщение)
    #32512932
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотря какой severity level у RaiseError.

Рэйсы от Level 11 генерят исключения SqlException

Ставь необходимый фильтр в Catch и дальше уже можешь исследовать это исключение и предпринимать необходимые действия.
...
Рейтинг: 0 / 0
Raiserror и ADO.NET (поймать сообщение)
    #32512937
Фотография Hermitap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как мне перехватить сообщение которое записано в t-Sql строке
например

Код: plaintext
RAISERROR ('Переполнение позиций', 16 , 16 ) 

Именно это сообщение "Переполнение позиций" я должен получить в коде.
я могу сохраненку менять и добовлять свои сообщения нетрогая клиентский код.
...
Рейтинг: 0 / 0
Raiserror и ADO.NET (поймать сообщение)
    #32512989
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На VB.NET
Код: plaintext
1.
2.
3.
4.
5.
6.
 Try  
   ' вызываем например хранимую процедуру
  Catch ex As System.Data.SqlClient.SqlException
          MsgBox(ex.Message)
  End Try


Советую посмотреть класс SqlException в Object Browser там еще кроме Message много чего полезного есть, что позволит подробнее описать ошибку.
...
Рейтинг: 0 / 0
Raiserror и ADO.NET (поймать сообщение)
    #32513004
Фотография Hermitap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер. СПАСИБО. То что нужно.
...
Рейтинг: 0 / 0
Raiserror и ADO.NET (поймать сообщение)
    #32513320
andsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще посмотреть на событие SQLConnection.InfoMessage

Позволяет ловить print-ы,
RaisError-ы, в том числе и те что ниже 11 (информационные)
...
Рейтинг: 0 / 0
Raiserror и ADO.NET (поймать сообщение)
    #32656907
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andsmМожно еще посмотреть на событие SQLConnection.InfoMessage

Позволяет ловить print-ы,
RaisError-ы, в том числе и те что ниже 11 (информационные)

Ну никак не могу я выйти на это InfoMessage. В Try Catch оно ловится ? Может кто приведёт структуру обработчика с этим InfoMessage
...
Рейтинг: 0 / 0
Raiserror и ADO.NET (поймать сообщение)
    #32657114
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposad
Ну никак не могу я выйти на это InfoMessage. В Try Catch оно ловится ? Может кто приведёт структуру обработчика с этим InfoMessage

Я так понял интересует код на VB.NET

Например можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private WithEvents m_sqlConnection As SqlClient.SqlConnection

Private Sub MyInfoMessageEventHandler(ByVal sender As Object, ByVal e As System.Data.SqlClient.SqlInfoMessageEventArgs) Handles m_sqlConnection.InfoMessage
    Dim sqlerror As SqlClient.SqlError
    Dim message As String = ""
    For Each sqlerror In e.Errors
        message = message & sqlerror.Message & vbCrLf
    Next
    MsgBox(message)
End Sub

Private Sub Test()
    Me.m_sqlConnection = New SqlClient.SqlConnection("Data Source=.;Initial Catalog=pubs;Integrated Security=true")
    Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand("print 'test print'; RAISERROR ('first raise',10, 1); RAISERROR ('second raise',9, 1)", Me.m_sqlConnection)
    Me.m_sqlConnection.Open()
    cmd.ExecuteNonQuery()
    Me.m_sqlConnection.Close()
End Sub

Для проверки можно вставить этот код в форму и вызвать метод Test()

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Raiserror и ADO.NET (поймать сообщение)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]