4

我正在向我的 SqlCommand 添加参数。这是一个简单的示例(仅使用与我的问题有关的属性):

Dim cmd As New System.Data.SqlClient.SqlCommand

cmd.CommandText = "af_get_data"
cmd.CommandType = System.Data.CommandType.StoredProcedure
cmd.Parameters.Add("@p1", "param1")
cmd.Parameters.Add("@p2", "param2")

我想要做的就是能够在调试模式下的断点处看到命令以及发送到数据库的参数。例子:

exec af_get_data @p1='param1', @p2='param2'

我尝试在调试模式下将鼠标悬停在cmd上,但参数属性没有列出参数,当我展开参数并查找我看到的项目时:

“Item = 为了评估索引属性,该属性必须是合格的,并且参数必须由用户显式提供。”

我不希望代码这样做,我知道应该有一种方法可以在其中一个调试窗口中以某种方式查看它。

帮助表示赞赏!

4

2 回答 2

2

如果您想准确查看发送到 SQL Server 的内容,最好的办法是实际使用SQL Server Profiler

但是,如果您想留在 Visual Studio 中,您可以右键单击cmd并选择Quick Watch...以深入了解对象的详细信息。但是,您可能找不到您正在寻找的确切内容,这就是我建议使用 SQL Server Profiler 的原因。

于 2013-01-03T20:44:01.973 回答
0

我意识到这是一个七年前的问题,但也许有人会发现我一直在使用的东西很有价值。

我有一个我写的通用查询助手类,它集中了很多废话。它看起来像这样。如果它的功能如下所示:

{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        using (SqlCommand command = new SqlCommand(sql, connection))
        {
            AddParameters(command, parameters);
#if DEBUG
            string debug = CreateDebugSQL(sql, parameters);
#endif
            using (SqlDataReader results = command.ExecuteReader())
            {
                return method(results);
            }
        }
    }
}

因为我不想打开探查器只是为了让字符串检查所有内容是否正确传递给它,所以我放置了一个函数来创建一个调试字符串。这是一个杂物,它用于调试,所以它不漂亮并且需要一些修整,但是:

static private string CreateDebugSQL(string sql, List<SqlParameter> parameters)
{
    string debugSQLString = sql.Substring(0, sql.IndexOf('@'));
    foreach (SqlParameter parameter in parameters)
    {
        string val = string.IsNullOrWhiteSpace(parameter.Value.ToString()) ? "" : parameter.Value.ToString();
        debugSQLString = debugSQLString + parameter.ParameterName + " = '" + val + "', ";
    }
    return debugSQLString; //just so we can breakpoint here to read it
}

您肯定会希望使其适应您正在做的任何事情,但它在重建 SQL 字符串时相当可靠。

于 2020-06-23T19:53:32.663 回答