- - PR -
パラメータクエリのログの取り方
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-06 15:31
こんにちは。
Command.ExecuteNonQuery または DataAdapter.Update 等で発行した実際のSQLをLogに残したいと考えているのですが、 パラメータクエリにしているので、Command.CommandTextでは 実際のSQLと内容が異なります。 実際発行したSQLを取得するには、どのような方法がありますでしょうか? 環境はVB.Net + IBM DB2です。 初歩的な質問かと思いますが、ご存知の方がいらっしゃいましたらご教授ください。 また、情報の不足や、不備等ございましたらご指摘ください。 よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2005-12-06 17:03
私は、DB 回りはバグを作りこんだり、パフォーマンスを測りたいときとかしょっちゅうなので、いつもラッパークラスを経由してアクセスするようにしています。
ラッパークラス経由で、SQL の設定、パラメーター等の設定を行えば、操作の記録を好きなだけログに残せますよ。 ラッパークラスが、ある程度の完成度になるまでは、けっこう大変ですけどね。 | ||||||||||||
|
投稿日時: 2005-12-06 17:59
ご回答ありがとうございます。
具体的に、以下のような場合、
"UPDATE TBL_A SET COLUMN_A = 'AAA' WHERE COLUMN_B = 'BBB'" という形でSQL文を取得したいのですが、 その方法はないでしょうか?
| ||||||||||||
|
投稿日時: 2005-12-06 18:24
.Net 側から取得するのはできるのかな
データベースの監査の機能などを使用しないと そこまで綺麗な SQL は拾えないような気がします。 | ||||||||||||
|
投稿日時: 2005-12-06 18:48
> 実際発行したSQLを取得するには、どのような方法がありますでしょうか?
実際発行したSQLは
でしょう。(正確ではない) データベース内部で
に置き換えられるのでしょうけど、これをADO.NETで取得する方法はないと思います。 .CommandTextと.Parametersから自力で奇麗なSQL文を生成するしかないでしょう。 | ||||||||||||
|
投稿日時: 2005-12-06 20:11
みなさま、ご回答ありがとうございます。
todoさん、
やはり方法はないのですね。 自分でSQL文を生成するか、パラメータクエリをやめる方向で考えてみます。 ありがとうございました。 | ||||||||||||
|
投稿日時: 2005-12-06 20:16
本当に生のSQLをログとして取る必要があるのですか?
検索条件のみだったらSQLにする必要はないですよね、 このためにパラメータクエリをやめてしまうのは もったいないような気がします。 (パフォーマンス的にもセキュリティ的にも) DB2は使用したことが無いのでわかりませんが、 バインド変数の展開までしてたSQLを調べるための機能はないのですか? | ||||||||||||
|
投稿日時: 2005-12-06 20:48
かるあさん、ご回答ありがとうございます。
今回作成しているのは社内で使用するツールなのですが、 社内的に、どのようなSQLをいつ・だれが発行したか、 細かくLogを取る規則になっているためなのですが。。。
そうですよね、パフォーマンスを考えてパラメータクエリを使用したロジックにしたのに、 Logのためだけにコードを変更するのは本末転倒な気がします。 CommandTextとParameterの羅列でもLogとして認めてもらえるのか、 上司に確認したいと思います。
わたしもこの件はわかりません。 調査してみます。 |
1