我有一个 SqlCommand 对象,我执行它的 ExecuteNonQuery 方法。查询失败,但我看不到如何获取查询来调试它。你可以帮帮我吗?
更新我目前正在使用 Wireshark (tcpdump) 来读取命令,但我认为这不是最好的解决方案
更新CommandText 属性仅提供存储过程名称。我想要带有参数的整个命令。
我有一个 SqlCommand 对象,我执行它的 ExecuteNonQuery 方法。查询失败,但我看不到如何获取查询来调试它。你可以帮帮我吗?
更新我目前正在使用 Wireshark (tcpdump) 来读取命令,但我认为这不是最好的解决方案
更新CommandText 属性仅提供存储过程名称。我想要带有参数的整个命令。
您可以使用 SQL Profiler 查看与参数器一起发送的对存储过程的查询/调用是什么。
您可以获得 SqlCommand 的 CommandText 属性的值吗?如果抛出异常,您可以捕获它,并访问 CommandText 属性,该属性将为您提供 SQL 命令,就像您设置它一样。当然,如果它包含参数,则不会将参数替换为适当的值。
如果您还想查看参数,那么您必须查看命令对象的 Parameters 属性(不仅仅是 CommandText),并查看此集合中的每个参数以提取值和数据类型,如果您对此感兴趣的话在。
现在,听起来您要调试的是存储过程本身,而不是 C# 代码,对吗?如果是这种情况,您需要将 Visual Studio 调试器附加到 SQL Server 以调试 T-SQL 代码。我知道你可以用 Oracle 做到这一点,所以我假设你应该能够用 SQL Server 开箱即用地做到这一点。
无论如何,您可能应该在 SQL 周围使用 try/catch 块,但这样做的好处是您可以轻松地返回 SQL 命令字符串以及错误。
这样的事情应该这样做:
try
{
***Execute your SQL query here***
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.WriteLine(***My SQL command string***);
}