从抛出的异常中检索查询

时间:2010-08-05 10:40:25

标签: .net vb.net exception-handling

我有一个日志表,我需要插入导致代码错误的查询。 我有一个共同的功能“WritetoLog”。

Catch ex As Exception
    writetolog(ex)
End Try

我的问题来自ex如何进行导致错误的查询。

e.g。如果insert命令给出异常,我应该像这样

SQL Query导致错误:Query + ex.Message

SQL查询导致错误:插入临时(“1”,“Anitha”,“TeamLeader”,)+'''附近的语法错误

请帮帮我。提前谢谢。

此致 Nilofar

2 个答案:

答案 0 :(得分:1)

而不是捕获Exception捕获最具体的异常类型。对于SQL Server,这将是SqlException。这样可以访问更详细的信息(例如Errors属性)。

如果派生的类型不包含您需要的信息,则需要自行添加。例如。捕获特定类型,创建自己的异常类型设置InnerException到原始异常,并在抛出之前保存查询。

然后捕获处理错误的异常类型。

答案 1 :(得分:0)

为了扩展理查德所说的内容,您可以在.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