2011-09-16 10 views
3

私は、ストアドプロシージャのADO Dbコマンドオブジェクトを使用する古典的なaspサイトを継承しました。ストアドプロシージャを呼び出す前に常にsp_sproc_columnsを呼び出すのはなぜですか?

私が気づいたことの1つは、SQLプロファイラでは、ストアドプロシージャを呼び出すたびにsp_sproc_columnsが呼び出されるということです。この通話を防ぐにはどうしたらいいですか?

ストアドプロシージャを呼び出すために使用されるコードは、この形態である:

Dim objCmd 
Set objCmd = server.CreateObject("adodb.command") 
objCmd.ActiveConnection = oConn 'scoped globally 
objCmd.CommandType = adCmdStoredProc 
objCmd.CommandText = "dbname.dbo.sprocName" 

objCmd.Parameters.Append objCmd.CreateParameter ("@Paramater1", adInteger, adParamInput, , 123) 
objCmd.Parameters.Append objCmd.CreateParameter ("@Paramater2", adInteger, adParamInput, , 456) 

答えて

2

に答えます。の後にコマンドオブジェクトに接続を設定するだけで、パラメータを設定できます。同様に:

Dim objCmd 
Set objCmd = server.CreateObject("adodb.command") 
objCmd.CommandType = adCmdStoredProc 
objCmd.CommandText = "dbname.dbo.sprocName" 
objCmd.Parameters.Append objCmd.CreateParameter ("@Paramater1", adInteger, adParamInput, , 123) 
objCmd.Parameters.Append objCmd.CreateParameter ("@Paramater2", adInteger, adParamInput, , 456) 
objCmd.ActiveConnection = oConn 'set after the command object has been fully configured. 
1

私はそれことを、一般的なケースで、あなたがすることができない言いsp_sproc_columns状態のマニュアルを傾斜させることだろう適切なデータ型の列を返すためにADODBが必要と考えるストアドプロシージャによって返される列を取得する必要があります。

既知のストアドプロシージャの特定のケースでは、パラメータについて完全に特定している場合は、呼び出しを避けることができることを示唆する興味深いmailing listディスカッションがあります。 ADODB.Commandため

ドキュメントはこの提案を支持しているように見えるだろう、私は、関連する部分のカップルを強調しました:CommandオブジェクトのParametersコレクション 上のRefreshメソッドを使用して

は、ストアドプロシージャのプロバイダパラメータ情報を取得しますまたは Commandオブジェクトで指定されたパラメータ化クエリ。一部のプロバイダは、ストアドプロシージャ呼び出しやパラメータ化されたクエリをサポートしていない を実行します。このような プロバイダーを使用しているときに、 パラメーターコレクションのRefreshメソッドを呼び出すと、エラーが返されます。

パラメータオブジェクトを定義しておらず、Refreshメソッドを呼び出す前に Parametersコレクションにアクセスすると、 は自動的にメソッドを呼び出してコレクションを作成します。

あなたが呼び出したいストアドプロシージャ またはパラメータ化クエリに関連するパラメータの性質を知って 場合は、パフォーマンスを向上させるために、プロバイダへの呼び出しを最小限に抑えることができます。 CreateParameterメソッドを使用して、 の適切なプロパティ設定を使用してParameterオブジェクトを作成し、Appendメソッドを使用してParametersを Parametersコレクションに追加します。これにより、パラメータ の値を設定して返すことができ、パラメータ の情報のプロバイダを呼び出す必要はありません。 パラメータ情報を提供していないプロバイダに書き込む場合は、このメソッドを使用してパラメータをすべて使用できるように、パラメータ コレクションを手動で設定する必要があります。必要に応じて コレクションのパラメータオブジェクトからパラメータオブジェクトを削除するには、Deleteメソッドを使用します。

ホープこれは結局のところ、これは本当に簡単です、あなたの質問

関連する問題