2011-10-27 5 views
8

CommandTextが実行された直後にアクセスする方法はありますか? 私は次のコードを持っている:私は知っている必要がありますどのようなパラメータ置換後に正確なsqlを表示するC#

cmd = new OracleCommand(sql.ToString(), conn); 
cmd.Parameters.Add(new OracleParameter("@parm", parmValue)); 


OracleDataAdapter da = new OracleDataAdapter(cmd); 
DataTable dt = new DataTable(); 
da.Fill(dt); 

は、既にSQLに含まれているparmValueの値を持つデータベースで実行されるSQLコマンド文字列です。言い換えれば、クエリ内で文字列 "@parm"を見ることができなくてはならず、代わりに値を参照する必要があります。

このSQLをログデータベースにプッシュして後で参照できるようにするには、この値が必要です。

ありがとうございます。

+2

実際にSQL Serverに送信されても​​、パラメータ化されます。変数は宣言され、クエリ内で使用されます。 –

+1

[生成されたSQL文をSqlCommand-Objectから取得する方法]の重複が可能ですか?(http://stackoverflow.com/questions/265192/how-to-get-the-generated-sql-statement-from-a -sqlcommand-object) –

+0

ダーン!それは私の答えでした!私が鉱山を入力している間にあなたはその房を見つけました。 – David

答えて

1

私はOracleについてはわかりませんが、RDBMSの私は個人的にはこれを行うことはできません。

パラメータを取得して結果のSQLクエリを表示する必要があるときは、コード内のパラメータコレクションをループし、名前/値のペアを抽出して結果のクエリなどをログに記録します

にStoredProc = InsertCallRecord:パラメータ:私たちのエラーログデータベースに、CUSTID = 651; CallId = 1234 PersonCalling =デイブ...

私だけではパフォーマンスだから、エラーログにこの操作を行いますすべての呼び出しでそれを実行するためにドラッグしますが、テストシナリオでも機能します。

2

Oracleが正確にこのように動作するかどうかは不明ですが、ほとんどのDBプロバイダでは、パラメータ化された問合せはプレーン・テキスト問合せとしてサーバーに送信されず、適切なパラメータを指定してExecuteコマンドとして送信されます。言い換えると、アプリケーションのレベルでは、DB自体でのみ起こっている置換はありません。サーバー上で実行されている実際のコマンドを表示するには、データベース自体のトレース/ログを調べるとよいでしょう。

関連する問題