ASP で SQL Server のストアド プロシージャを呼び出すとき、Adodb.Command オブジェクトを使用する場合は、通常次のコードを使用します:
dim cmd, rs
set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = 接続
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "TestProc"
cmd.Parameters.Append cmd.CreateParameter("@a" , adInteger, adParamInput, 4, 1)
cmd.Parameters.Append cmd.CreateParameter("@b" , adVarChar, adParamInput, 50, 'b')
...
set rs = cmd.Execute
今日、プログラムをデバッグしているときに、ASP ページで特定のパラメーターに値が割り当てられていないことが示されていることがわかりましたが、実際には、値を割り当てていない別のパラメーターでした。 そこで、SQL Server のプロファイラーを開いてプログラムを実行し、ASP から SQL Server に送信された SQL ステートメントが実際には次の形式であることをキャプチャしました:
execute TestProc 1, 'b', ...。
理由は明らかです。ただし、ADO エンジンはストアド プロシージャの呼び出しを完全な構文に変換するのではなく、上記の省略方法を使用します。このように、途中のパラメータが失われた場合、他のパラメータが失われたと誤って判断される可能性があります。位置ずれ。
次に、Command オブジェクトのプロパティを確認し、次の文を追加しました:
cmd.NamedParameters = true
。これは、明示的に名前を付けた変数フォームを使用することを指定することを意味します。その後、プログラムを実行すると、イベント プロファイラーでキャプチャされたステートメントが次のようになったことがわかりました。ここで、
exec TestProc @a = 1, @b = 'b', ...
エラー パラメーターも正しいです。
今はすべてOKです