14

可能重复:
获取导致 SQLException 的 Query/CommandText

我正在处理一些错误处理代码(使用 elmah),默认设置仅发送错误消息。我想知道引发错误的实际 SQL(即“SELECT * FROM thisTableDoesNotExist”)

这是我到目前为止所拥有的:

if (e.Error.Exception is SqlException)
{
    //if SQL exception try to give some extra information
    SqlException sqlEx = e.Error.Exception as SqlException;
    e.Mail.Body = e.Mail.Body + "<div>" +
                                "<h1>SQL EXCEPTION</h1>" +
                                "<b>Message</b>: " + sqlEx.Message +
                                "<br/><b>LineNumber:</b> " + sqlEx.LineNumber + 
                                "<br/><b>Source:</b> " + sqlEx.Source +
                                "<br/><b>Procedure:</b> " + sqlEx.Procedure +
                                "</div>";
}

而且我希望能够显示实际的 SQL。数据库是 SQL Server 2008,SqlException 是System.Data.SqlClient.SqlException类型。

4

4 回答 4

7

不可能。您需要捕获执行 SQL 命令的异常,然后将命令文本包含在您自己的自定义异常中。请参阅获取导致 SQLException 的 Query/CommandText

于 2011-01-28T22:42:14.083 回答
1

检查异常的最佳方法是在发生异常的代码中放置断点并检查异常对象图的值。

像这样尝试InnerException的 Message 成员:

sqlEx.InnerException.Message

它可能不会提供失败的确切 SQL,但可能会为您提供更具体的信息,例如操作和表名。StackTrace 成员也可能有一些信息。

于 2011-01-28T22:40:46.643 回答
1

您的 SQL 中可能有错误处理代码,当它遇到错误时,您可以使用 print 或 return 语句将它尝试运行的 SQL 发送回,或者您希望将其返回到您的应用程序。

于 2011-01-28T22:45:48.890 回答
0

如果您在 C# 方面无法获得足够的信息,您可以使用“SQL 分析器”(完整 MS SQL 的一部分)来查看执行了哪些命令。

有关 SQL Profiler 的信息 http://msdn.microsoft.com/en-us/library/ms181091.aspx。如果您没有探查器,您还应该能够使用底层跟踪 API - http://msdn.microsoft.com/en-us/library/ms191006.aspx

于 2011-01-28T22:51:40.053 回答