Получить запрос из брошенного исключения - PullRequest
0 голосов
/ 05 августа 2010

У меня есть таблица журнала, где мне нужно вставить запрос, который вызывает ошибки в коде.У меня есть общая функция «WritetoLog».

Catch ex As Exception
    writetolog(ex)
End Try

Мой вопрос от бывшего, как мне взять запрос, который вызывает ошибку.

например, если команда вставки выдает исключение, я должен получить вот так

SQL-запрос вызывает ошибку: Query + ex.Message

SQL-запрос вызывает ошибку: Вставить в temp«1», «Anitha», «TeamLeader»,) + неверный синтаксис рядом с «)»

Пожалуйста, помогите мне.Заранее спасибо.

С уважением, Нилофар

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Вместо того, чтобы поймать Exception, поймайте наиболее конкретный тип исключения. Для SQL Server это будет SqlException. Это позволит получить доступ к более подробной информации (например, Errors свойство).

Если наиболее производный тип не содержит нужной вам информации, вам нужно будет добавить ее самостоятельно. Например. поймайте определенный тип, создайте свой собственный тип исключения, установив InnerException в исходное исключение, и сохраните запрос перед его выдачей.

Затем перехватите ваш тип исключения, где вы обрабатываете ошибку.

0 голосов
/ 05 августа 2010

Чтобы расширить то, что говорит Ричард, вы можете создавать свои собственные сообщения об исключениях в .NET. Вы можете встроить строку запроса в сообщение об исключении и передать перехваченное исключение как InnerException вашего исключения. Например:

Sub DoStuffInToTheDatabase()
    Dim sql As String
    Dim dataAccess As New MyDataAccessComponent()
    Dim dt As DataTable

    sql = "Select Top 10 * From Orders"

    Try
        dt = dataAccess.GetDataTable(sql)
    Catch ex As Exception
        Throw New DataException("An exception was thrown with this query: " _
            & sql, ex)   ' <== You put ex into your new DataException'
    End Try
End Sub

Тогда вы можете сделать это в коде регистрации ошибок:

 Sub WriteErrorLog(ex As Exception)
     Dim errMsg As String
     errMsg = ex.Message
     If Not ex.InnerException Is Nothing Then
         errMsg += " " & ex.InnerException.Message
     End If

     '... '
 End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...