C# 如何获取在C中导致SqlException的实际SQL?

C# 如何获取在C中导致SqlException的实际SQL?,c#,sql,sqlexception,C#,Sql,Sqlexception,可能重复: 我正在使用elmah编写一些错误处理代码,默认设置只发送错误消息。我想知道抛出错误的实际SQL,即从thisTableDoesNotExist中选择* 这就是我到目前为止所做的: if (e.Error.Exception is SqlException) { //if SQL exception try to give some extra information SqlException sqlEx = e.Error.Exception as SqlExcep

可能重复:

我正在使用elmah编写一些错误处理代码,默认设置只发送错误消息。我想知道抛出错误的实际SQL,即从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类型为。

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

请尝试发送以下消息:

sqlEx.InnerException.Message

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

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

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

如果您无法在C端获得足够的信息,您可以使用完整MS SQL的SQL探查器部分来查看执行了哪些命令


有关SQL探查器的信息。如果您没有profiler,您也应该能够使用底层跟踪API-

您还可以在引用的答案中包含代码,这不就是该问题的重复吗?那么?问题的最佳解决方案。其他答案都是正确的,但这是一个合法的、非黑客的解决方法。除了MS-SQL之外,其他数据提供商也可以抛出SQLException。