SqlCommand オブジェクトがあり、その ExecuteNonQuery メソッドを実行します。クエリは失敗しますが、クエリを取得してデバッグする方法がわかりません。私たちを手伝ってくれますか?
更新現在、コマンドを読み取るために Wireshark (tcpdump) を使用していますが、これは最善の解決策ではないと思います
更新CommandText プロパティは、ストアド プロシージャ名のみを提供します。パラメータを含むコマンド全体が必要です。
SqlCommand オブジェクトがあり、その ExecuteNonQuery メソッドを実行します。クエリは失敗しますが、クエリを取得してデバッグする方法がわかりません。私たちを手伝ってくれますか?
更新現在、コマンドを読み取るために Wireshark (tcpdump) を使用していますが、これは最善の解決策ではないと思います
更新CommandText プロパティは、ストアド プロシージャ名のみを提供します。パラメータを含むコマンド全体が必要です。
SQL プロファイラーを使用して、パラメーターと共に送信されるストアド プロシージャへのクエリ/呼び出しを確認できます。
パラメータも確認したい場合は、コマンドオブジェクト(CommandTextだけでなく)のParametersプロパティを確認し、このコレクションの各パラメータを確認して、値とデータ型を抽出する必要があります。の。
さて、デバッグしようとしているのは、C#コードではなく、ストアドプロシージャ自体のようですが、そうですか?その場合は、Visual StudioデバッガーをSQLサーバーに接続して、T-SQLコードをデバッグする必要があります。Oracleでこれを実行できることはわかっているので、SQLサーバーですぐに実行できるはずだと思います。
とにかくSQLの周りでtry/catchブロックを使用する必要がありますが、これを行うことの利点は、エラーとともにSQLコマンド文字列を簡単に返すことができることです。
このような何かがそれを行う必要があります:
try
{
***Execute your SQL query here***
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.WriteLine(***My SQL command string***);
}
SqlCommand の CommandText プロパティの値を取得できますか? 例外がスローされた場合は、それをキャッチし、CommandText プロパティにアクセスして、設定したように SQL コマンドを取得できます。もちろん、パラメーターが含まれている場合、パラメーターは適切な値に置き換えられません。