ASP.NET 2.0 で開発を行っています。

SqlDataSource や ObjectDataSource などで実際に発行されたSQL(パラメータ値を含む)
を取得するにはどのようにしたらよいでしょうか。DBにはOracleを使用しています。

・試したこと
 SqlDataSource の Updated イベントで「e.Command.CommandText.ToString()」。
 これで取得できたのは「… WHERE PARAM1 = :PARAM1」 のようにパラメータ名でした。
 取得したいのは「… WHERE PARAM1 = 1101」のようにパラーメータ値を含むSQLです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/10/04 11:55:18
  • 終了:2007/10/11 12:00:07

回答(3件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402007/10/04 23:24:23

ポイント35pt

ORACLEにSQLのログをはかせれば、実際発行したSQL

そのものが分かると思います。

環境設定は良く分からないので、これでよいのかどうか不明ですが

ORACLEで発行したSQLのログをはかせることは可能です。

http://www.atmarkit.co.jp/fsecurity/rensai/dbsec05/dbsec01.html

--------------------------

プログラム上で、パラメータクエリを発行して、実際に発行したSQLを取得する方法は、なかったと思います。

id:matsu-boolean No.3

matsu-boolean回答回数43ベストアンサー獲得回数72007/10/09 19:16:44

ポイント10pt

 「select * from V$SQL」とすることで最近実行したSQLを取得することが出来ます。(systemユーザーなどで無いと参照できないかも)

 ただし、パラメータに関しては 「… WHERE PARAM1 = 1101」ではなく、「… WHERE PARAM1 = :1」等として表示されます。あくまでも、パラメータはパラメータのまま扱われ、途中の段階でSQL文字列に展開されるわけではないからです。

 どうしてもパラメータを展開した形でSQLが必要なら、自身で「:PARAM1」を「1101」等に置き換える処理を書かねばなりません。

 ちなみに、Oracle内部で「… WHERE PARAM1 = :PARAM1」を「:PARAM1 = 1101」で実行するのと「… WHERE PARAM1 = 1101」は別のSQLとして扱われます。実行計画(内部でSQLをどう解釈するか)もおそらく変化し、実行時間も変わる可能性があります。


http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/index.html

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません