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")

私がやりたいのは、デバッグモードのブレークポイントでDBに送信されるパラメータとともにコマンドを確認できることだけです。例:

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

デバッグモードでcmdにカーソルを合わせようとしましたが、パラメーターを展開して項目を探すと、parametersプロパティにパラメーターが表示されません。

「アイテム=インデックス付きプロパティを評価するには、プロパティを修飾し、引数をユーザーが明示的に指定する必要があります。」

私はコードにこれをさせたくありません、私はどういうわけかデバッグウィンドウの1つでそれを見る方法があるべきであることを知っています。

助けていただければ幸いです!

4

2 に答える 2

2

SQL Serverに送信されている内容を正確に確認したい場合は、実際にSQLServerProfilerを使用することをお勧めします

ただし、Visual Studio内にとどまりたい場合は、右クリックしcmdて選択Quick Watch...し、オブジェクトの詳細を掘り下げることができます。ただし、探しているものが正確に見つからない場合があるため、SQLServerプロファイラーをお勧めします。

于 2013-01-03T20:44:01.973 に答える
0

これは7年前の質問だと思いますが、私が使ってきたものが誰かに役立つかもしれません。

私が書いた一般的なクエリヘルパークラスがありますが、これは多くのがらくたを一元化するだけです。こんな感じです。その機能が次のようになっている場合の1つ:

{
    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 に答える