1

SQL サーバーに送信された準備済みステートメントにアクセスする方法はありますか?

            Dim params(1) As OleDb.OleDbParameter
            params(0) = New OleDb.OleDbParameter("@ID", OleDb.OleDbType.VarChar, 50)
            params(0).Value = guiItemsGridView.Rows(e.RowIndex).Cells("ID").Value
            params(1) = New OleDb.OleDbParameter("@SavedValue", OleDb.OleDbType.VarChar, 50)
            params(1).Value = guiItemsGridView.Rows(e.RowIndex).Cells("Saved Value").Value

            Dim QueryString As String = "UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@ID"
            myDatabase.objAdapter.UpdateCommand = New OleDb.OleDbCommand(QueryString, DatabaseConnection)

            myDatabase.objAdapter.UpdateCommand.Parameters.AddRange(params)
            myDatabase.objAdapter.UpdateCommand.Prepare()

            Debug.Print(myDatabase.objAdapter.UpdateCommand.CommandText)

パラメータが追加された後に、準備されたクエリにアクセスする方法を探しています。UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@IDコマンドを準備した後、パラメーターが渡されたにもかかわらず、CommandText にはまだ基本クエリが含まれています。

このアプリケーションの他の領域をデバッグするために、このコードのチャンクによって実行されたクエリのログを作成すると便利です。

4

4 に答える 4

1

パラメータ機能を使用してクエリをログに記録する方法を見つけられませんでした。私は結局、文字列でクエリを作成することに戻り、次にその文字列を消費しました:

QueryString = String.Format("UPDATE Items SET [Saved Value]={0} WHERE ID={1}", SavedValue, ID)

次に、クエリ関数とロギング関数の両方でその文字列を使用しました。

于 2009-12-30T15:19:25.310 に答える
0

しばらく検索しようとしましたが、そのライブラリを使用して、パラメータが挿入されたsqlステートメントが返されるのを見つけることができませんでした。私が思いついた最高のものは、SQLサーバーのSQLServerプロファイラーでした。オンにして、[ SQL:StmtCompletedTSQL]メニューとSP:StmtCompleted[ストアドプロシージャ]メニューのオプションをオンにすると、次のようなイベントテキストデータ列が表示されます。

SQL:StmtCompleted

EXEC    @return_value = [dbo].[ap_test]
        @User_ID = N'testuser'

SP:完了

SELECT *
FROM Table1
WHERE User_ID = @User_ID

クエリとそれぞれの入力パラメータをログに記録する方法を探していたので、これは便利かもしれませんがUpdateCommand.CommandText、挿入されたパラメータをキャプチャした方が間違いなく良いでしょう。私はこの機能を何度か自分で望んでいたので、そこに解決策があるかどうかを引き続き確認します。

于 2009-12-15T23:28:45.580 に答える