- - PR -
ODP.NETの実行SQLについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-23 22:39
はじめまして。
VB.NETの初心者です。 ODP.NETを使用して開発を行っているのですが、下記のようにCommandText を指定し、パラメータをセットしました。 Dim Cmd As New Oracle.DataAccess.Client.OracleCommand Cmd.CommandText = "SELECT * FROM TAB WHERE TNAME = :AAA" Param.ParameterName = "AAA" Param.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Char Param.Value = "test" Param.Size = 10 Cmd.Parameters.Add(Param) Read = Cmd.ExecuteReader SQLの実行は正常に行われ、正しい結果も取得できるのですが 実際に実行されているSQLを確認する方法は有るのでしょうか? ご存じの方がいらっしゃいましたら、ご回答お願いいたします。 | ||||||||
|
投稿日時: 2004-05-23 23:46
candideさん、こんばんは。
V$SQLビューで確認できますが、そういう事ではなく? | ||||||||
|
投稿日時: 2004-05-23 23:59
きくちゃん 様、ご回答ありがとうございました。
申し訳ありません。私の書き方が悪かったようです。 実行されるSQLを実行せずに確認したいのです。 実行されるSQLを毎回DBを参照して確認するのは大変ですので。 私が投稿しました方法でSQL文を発行する場合は、 どのようなデバック方法があるのでしょうか? ご存知でしたらご回答いただけますでしょうか? [ メッセージ編集済み 編集者: candide 編集日時 2004-05-24 00:00 ] [ メッセージ編集済み 編集者: candide 編集日時 2004-05-24 00:01 ] | ||||||||
|
投稿日時: 2004-05-24 01:13
candideさん、こんばんは。
ごめんなさい。何をどうしたいのかが、良く判らないんです...。 | ||||||||
|
投稿日時: 2004-05-24 01:55
NAL-6295です。
例えば・・・ 1.トランザクション開始 2.SQL文実行 3.確認したい結果をDataTableに取得 4.ロールバック じゃ駄目ですかね。 勿論、ロールバックできないSQL文実行しちゃったら駄目ですが・・・。 | ||||||||
|
投稿日時: 2004-05-24 10:09
皆様ご回答ありがとうございました。
そして私の説明不足で申し訳ありません。 私が行いたいことは、最初に投稿しましたサンプルコードにおいて ※の時点で実行されるSQLをDebug.WriteLineなどで確認したいと言うことです。 Cmd.Parameters.Add(Param) ※ -----この時点 Read = Cmd.ExecuteReader もしかしてCmd.Parameters.Add()を使用してSQL文にパラメータを追加し、 SQL文を発行しようとした場合、Debug.WriteLineなどを使用しての 確認は不可能なのでしょうか? 度々申し訳ありませんが、ご回答お願いいたします。 | ||||||||
|
投稿日時: 2004-05-24 10:18
つまり、「パラメータを展開したSQL文を見たい」ということですか? SELECT * FROM TAB WHERE TNAME = :AAA ↓ SELECT * FROM TAB WHERE TNAME = test 一つは、OracleCmmandを継承した、CustomOracleCommandクラスを作って、Executingイベントを追加し、オーバーライドしたExecute系のメソッドで、パラメータ展開したSQL文を引数にしたイベントを発生させる。 もう一つは、Execute系のメソッドをコールするときに、自前で展開する。 ですかね。展開については、こんな感じで。 直打ち未検証:
↑このコードは、SqlCommandと、OracleCommandに対して有効ですが、OleDbCommandには使えません。OleDbCommandでは、プレースホルダに名前を使えない為、正規表現クラスのReplaceメソッドでは、最初のパラメータ値に展開されます。 OleDbCommandで同じことを行うには、String.IndexOfで、前から"@"の位置を探し、1文字削除して、Value.ToStringを挿入します。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-05-24 10:58 ] | ||||||||
|
投稿日時: 2004-05-24 10:46
あぁ、そういう事なら、V$SQLビューを見る、という私の最初の投稿もNGですね。 "SELECT * FROM TAB WHERE TNAME = :AAA" のまま格納されているはずですから。 お役に立てず申し訳ありません>candideさん |