人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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


●質問者: wevdevjp
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2.0 ASP.NET command.com dB Oracle
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● KUROX
●35ポイント

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

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

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

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

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

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

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


2 ● minkpa
●35ポイント

http://www.ironhearts.com/diary/archives/001227.html


3 ● matsu-boolean
●10ポイント

「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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ