【问题标题】:Retrieve Query from the Exception thrown从抛出的异常中检索查询
【发布时间】:2010-08-05 10:40:24
【问题描述】:

我有一个日志表,我需要在其中插入导致代码错误的查询。 我有一个通用功能“WritetoLog”。

Catch ex As Exception
    writetolog(ex)
End Try

我的问题来自前任我如何接受导致错误的查询。

例如如果插入命令给出异常我应该得到这样的

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

SQL 查询导致错误:插入 temp("1",'Anitha','TeamLeader',) + ')' 附近的语法不正确

请帮助我。提前致谢。

问候 尼洛法

【问题讨论】:

    标签: .net vb.net exception-handling


    【解决方案1】:

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

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

    然后在你处理错误的地方捕获你的异常类型。

    【讨论】:

    【解决方案2】:

    要扩展 Richard 所说的内容,您可以在 .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
    

    【讨论】:

    • 然后我必须将 sqlquery 作为参数传递。然后在整个模块的所有函数中,我还需要传递 sqlquery。那将是更多的工作。非常感谢您的真诚努力......一切都很好,保持微笑...... :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多