ASP 開発におけるストアド プロシージャ アプリケーションの詳細な説明 | 呼び出し、パラメータ、ストレージ、データベース、出力、コンパイル、mycomm、入力、ユーザー ID、コード ASP とストアド プロシージャ (ストアド プロシージャ) に関する記事はたくさんありますが、著者がそれを理解しているかどうかは疑問です。実際にそれを実践しました。私が初心者だった頃、多くの関連情報を調べたところ、提供されている方法の多くが実際には同じではないことがわかりました。単純なアプリケーションの場合、これらのマテリアルは役立つかもしれませんが、基本的に同じで相互にコピーされるため、これらのマテリアルはこれに限定されます。少し複雑なアプリケーションの場合は、すべてが不明瞭になります。
ここでは、基本的にストアド プロシージャを呼び出して SQL Server にアクセスします。次のテキストは、皆さんの参考になれば幸いです。
ストアド プロシージャは、実行可能オブジェクトとしてデータベースに保存された 1 つ以上の SQL コマンドです。
定義は常に抽象的です。ストアド プロシージャは、実際には特定の操作を完了できる SQL ステートメントのセットですが、このステートメントのセットはデータベースに配置されます (ここでは SQL Server についてのみ説明します)。 ASP でストアド プロシージャを作成し、ストアド プロシージャを呼び出すと、SQL ステートメントと ASP コードの混在を避けることができます。これを行うことには少なくとも 3 つの利点があります。
まず、効率が大幅に向上します。ストアド プロシージャ自体の実行速度は非常に高速であり、ストアド プロシージャを呼び出すことでデータベースとの対話の数を大幅に減らすことができます。
第二に、安全性の向上です。 ASP コードに SQL ステートメントを混在させると、コードが侵害されると、ライブラリ構造も侵害されることになります。
第三に、SQL ステートメントの再利用に役立ちます。
ASP では、ストアド プロシージャは通常、コマンド オブジェクトを通じて呼び出されます。状況に応じて、この記事では他の呼び出し方法も紹介します。説明の便宜上、ストアド プロシージャの入出力に基づいて次のように簡単に分類します。
1. 単一のレコード セットのみを返すストアド プロシージャは、
次のストアド プロシージャを想定しています (この記事の目的は説明ではありません)
。T-SQL 構文なので、ストアド プロシージャはコードのみを提供し、説明はありません)。
/*SP1*/
プロシージャの作成 dbo.getUserList
として
ノーカウントをオンに設定する
始める
select * from dbo.[ユーザー情報]
終わり
go
ストアド プロシージャは、userinfo テーブル内のすべてのレコードを取得し、レコード セットを返します。コマンド オブジェクトを通じてストアド プロシージャを呼び出すための ASP コードは次のとおりです。
'**コマンド オブジェクトを介してストアド プロシージャを呼び出す**
DIM MyComm、MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です
MyComm.CommandText = "getUserList" 'ストアド プロシージャ名を指定します
MyComm.CommandType = 4 'これがストアド プロシージャであることを示します
MyComm.Prepared = true '最初に SQL コマンドをコンパイルする必要があります
MyRst = MyComm.Execute を設定します
Set MyComm = Nothing
ストアド プロシージャで取得したレコード セットを MyRst に割り当てます。次に、MyRst を操作できます。
上記のコードでは、CommandType 属性はリクエストのタイプを示します。値と説明は次のとおりです。
-1 は CommandText パラメータのタイプを決定できないことを示します。 1 は CommandText パラメータが一般的なコマンド タイプであることを示します。 CommandText パラメーターは既存のテーブル名です。 4 は、CommandText パラメーターが次の名前であることを示します。 ストアド プロシージャの名前は、
Connection オブジェクトまたは Recordset オブジェクトを通じてストアド プロシージャを呼び出すためにも使用できます。 メソッドは次のとおりです。
'**Connection オブジェクトを介してストアド プロシージャを呼び出す**
DIM MyConn、MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr 'MyConStr はデータベース接続文字列です
Set MyRst = MyConn.Execute("getUserList",0,4) '最後のパラメータは CommandType と同じ意味です
Set MyConn = Nothing
'**Recordset オブジェクトを通じてストアド プロシージャを呼び出す**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr はデータベース接続文字列で、最後のパラメータは CommandType
2 と同じ意味を持ちます。入力と出力のないストアド プロシージャについては、
次のストアド プロシージャを参照してください。
/*SP2*/
プロシージャの作成 dbo.delUserAll
として
ノーカウントをオンに設定する
始める
dbo.[ユーザー情報] から削除
終わり
go
ストアド プロシージャは、入力も出力も行わずに userinfo テーブル内のすべてのレコードを削除します。呼び出し方法は基本的に上記と同じですが、レコード セットを取得する必要がない点が異なります。
'**コマンド オブジェクトを介してストアド プロシージャを呼び出す**
ディムマイコム
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です
MyComm.CommandText = "delUserAll" 'ストアド プロシージャ名を指定します
MyComm.CommandType = 4 'これがストアド プロシージャであることを示します
MyComm.Prepared = true '最初に SQL コマンドをコンパイルする必要があります
MyComm.Execute 'ここで設定されたレコードを取得する必要はありません
Set MyComm = Nothing
もちろん、このようなストアド プロシージャは Connection オブジェクトまたは Recordset オブジェクトを通じて呼び出すこともできますが、レコードセットを取得するために Recordset オブジェクトが作成されます。レコードセットが返されない場合は、Command オブジェクトを使用することをお勧めします。
3.SP2 と同様の操作を実行する場合、
戻り値を持つストアド プロシージャは、
データの一貫性を維持するために SQL Server の強力なトランザクション処理機能を最大限に活用する必要があります。さらに、実行ステータスを返すためにストアド プロシージャが必要になる場合があります。そのためには、SP2 を次のように変更します。
/*SP3*/
プロシージャの作成 dbo.delUserAll
として
ノーカウントをオンに設定する
始める
取引を開始する
dbo.[ユーザー情報] から削除
IF @@エラー=0
始める
トランザクションのコミット
1を返す
終わり
それ以外
始める
ロールバックトランザクション
0を返す
終わり
戻る
終わり
go
ストアド プロシージャは、削除が正常に実行された場合は 1 を返し、それ以外の場合は 0 を返し、ロールバック操作を実行します。 ASP で戻り値を取得するには、Parameters コレクションを使用してパラメーターを宣言する必要があります。
'**戻り値を指定してストアド プロシージャを呼び出し、戻り値を取得します**
DIM マイコム、マイパラ
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です
MyComm.CommandText = "delUserAll" 'ストアド プロシージャ名を指定します
MyComm.CommandType = 4 'これがストアド プロシージャであることを示します
MyComm.Prepared = true '最初に SQL コマンドをコンパイルする必要があります
'戻り値を宣言する
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.MyPara の追加
MyComm.Execute
'戻り値を取得する
DIM retValue
retValue = MyComm(0) 'または retValue = MyComm.Parameters(0)
Set MyComm = Nothing
MyComm.CreateParameter("RETURN",2,4) では、各パラメーターの意味は次のとおりです。
最初のパラメーター ("RETURE") はパラメーター名です。パラメータ名は任意に設定できますが、通常はストアドプロシージャ内で宣言したパラメータ名と同じにする必要があります。通常は「RETURE」に設定する戻り値を次に示します。2
番目のパラメータ (2) はパラメータのデータ型を示します。一般的に使用される型コードは以下を参照してください。
adBigInt: 20;
アドバイナリ: 128;
adBoolean: 11;
adChar: 129;
adDBTimeStamp: 135;
adEmpty: 0;
ad整数: 3;
adSmallInt: 2;
adTinyInt: 16;
adVarChar: 200;
戻り値には整数のみを使用でき、-1 ~ -99 は予約値です。3
番目のパラメーター (4) はパラメーターの性質を示し、4 はこれが戻り値であることを示します。このパラメータの値の説明は次のとおりです:
0: タイプを決定できません; 1: 入力パラメータ; 3: 入力パラメータまたは出力パラメータ; 4: 戻り
値完全なコードであること、つまり、実際には最も複雑なコードであること
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara は
次のように簡略化できます。
MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4) は
引き続き簡素化することもできます。これについては後で説明します。
パラメータ付きのストアド プロシージャの場合、Command オブジェクトを使用してのみ呼び出すことができます (Connection オブジェクトまたは Recordset オブジェクトを通じて呼び出せるという情報もありますが、試していません)。
4. 入力パラメータと出力パラメータを持つストアド プロシージャの戻り値は、
実際には特別な出力パラメータです。多くの場合、入力パラメータと出力パラメータの両方を持つストアド プロシージャを使用します。たとえば、ユーザー情報テーブル内の特定の ID を持つユーザーのユーザー名を取得したいとします。 --user ID、および出力パラメータ----ユーザー名。この関数を実装するストアド プロシージャは次のとおりです。
/*SP4*/
プロシージャの作成 dbo.getUserName
@ユーザーID int、
@UserName varchar(40) の出力
として
ノーカウントをオンに設定する
始める
@UserID が null の場合は戻ります
@ユーザー名=ユーザー名を選択してください
dbo より。[ユーザー情報]
ここで、ユーザーID=@ユーザーID
戻る
終わり
ストアド プロシージャを呼び出す
go
の ASP コードは次のとおりです。
'**入力パラメータと出力パラメータを使用したストアド プロシージャの呼び出し**
DIM MyComm、ユーザーID、ユーザー名
ユーザーID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です
MyComm.CommandText = "getUserName" 'ストアド プロシージャ名を指定します
MyComm.CommandType = 4 'これがストアド プロシージャであることを示します
MyComm.Prepared = true '最初に SQL コマンドをコンパイルする必要があります
'パラメータを宣言する
MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)
MyComm.Parameters.append MyComm.CreateParameter("@UserName",200,2,40)
MyComm.Execute
'パラメータを取得します
ユーザー名 = MyComm(1)
Set MyComm = Nothing
上記のコードでは、戻り値の宣言とは異なり、入力パラメーターを宣言する場合は 5 つのパラメーターが必要であり、出力パラメーターを宣言する場合は 4 つのパラメーターが必要であることがわかります。入力パラメータを宣言する場合、パラメータ名、パラメータのデータ型、パラメータの型、データ長、パラメータ値の 5 つのパラメータが使用されます。出力パラメータを宣言する場合、最後のパラメータ、つまりパラメータ値はありません。
パラメータを宣言するときは、順序がストアド プロシージャで定義されているものと同じである必要があり、各パラメータのデータ型と長さもストアド プロシージャで定義されているものと同じである必要があることに特別な注意を払う必要があります。
ストアド プロシージャに複数のパラメーターがある場合、ASP コードは複雑になります。 with コマンドを使用してコードを簡素化できます。
'**入力パラメータと出力パラメータを使用してストアド プロシージャを呼び出す (簡略化されたコード)**
DIM MyComm、ユーザーID、ユーザー名
ユーザーID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
withMyComm
.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です。CommandText = "getUserName" 'ストアド プロシージャ名を指定します。CommandType = 4 'これがストアド プロシージャであることを示します。Prepared = true '最初に SQL コマンドをコンパイルする必要があります。パラメータ.append .CreateParameter ("@ユーザーID",3,1,4,ユーザーID)
.Parameters.append .CreateParameter("@ユーザー名",200,2,40)
。実行する
で終わる
ユーザー名 = MyComm(1)
Set MyComm = Nothing
ID 1 ~ 10 を持つ 10 人のユーザーのユーザー名を取得したい場合、Command オブジェクトを 10 回作成する必要がありますか?いいえ。同じストアド プロシージャを複数回呼び出す必要がある場合は、入力パラメータを変更するだけで、異なる出力が得られます。
'**同じストアド プロシージャを複数回呼び出す**
DIM MyComm、ユーザーID、ユーザー名
ユーザー名 = ""
Set MyComm = Server.CreateObject("ADODB.Command")
UserID = 1 ~ 10 の場合
withMyComm
.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です。CommandText = "getUserName" 'ストアド プロシージャ名を指定します。CommandType = 4 'これがストアド プロシージャであることを示します。Prepared = true 'UserID の場合、最初に SQL コマンドをコンパイルする必要があります。 = 1 の場合
.Parameters.append .CreateParameter("@ユーザーID",3,1,4,ユーザーID)
.Parameters.append .CreateParameter("@ユーザー名",200,2,40)
。実行する
それ以外
'入力パラメータに値を再割り当てします(この時点でパラメータ値が変化しない入力パラメータと出力パラメータは再宣言する必要はありません)
.Parameters("@UserID") = ユーザーID
。実行する
終了する場合
で終わる
UserName = UserName + MyComm(1) + "," '配列ストレージを使用したいのかもしれません
次
Set MyComm = Nothing
上記のコードからわかるように、同じストアド プロシージャを繰り返し呼び出す場合、値が変更された入力パラメータを再割り当てするだけで済みます。このメソッドには複数の入力パラメータと出力パラメータがあり、呼び出されるのは 1 つだけです。入力パラメータの値を変更するたびに、コードの量を大幅に削減できます。
5. 戻り値、入力パラメタ、出力パラメタを同時に持つストアドプロシージャ
前述のように、ストアドプロシージャを呼び出すときのパラメタの宣言順序は、ストアドプロシージャで定義された順序と同じである必要があります
。。特に注意すべきもう 1 つの点は、ストアド プロシージャに戻り値と入出力パラメータの両方がある場合、戻り値を最初に宣言する必要があることです。
この場合の呼び出しメソッドを示すために、上記の例を改良してみましょう。 ID 1 のユーザーのユーザー名を引き続き取得しますが、ユーザーが存在しない可能性があります (ユーザーは削除されており、userid は自己増加フィールドです)。ストアド プロシージャは、ユーザーが存在するかどうかに応じて異なる値を返します。この時点で、ストアド プロシージャと ASP コードは次のようになります。
/*SP5*/
プロシージャの作成 dbo.getUserName
--「順序」の印象を深めるために、以下の 2 つのパラメータの定義順序を逆にします。
@UserName varchar(40) 出力、
@ユーザーID int
として
ノーカウントをオンに設定する
始める
@UserID が null の場合は戻ります
@ユーザー名=ユーザー名を選択してください
dbo より。[ユーザー情報]
ここで、ユーザーID=@ユーザーID
@@行数>0の場合
1を返す
それ以外
0を返す
戻る
終わり
go
'**戻り値、入力パラメータ、および出力パラメータを使用してストアド プロシージャを呼び出します**
DIM MyComm、ユーザーID、ユーザー名
ユーザーID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
withMyComm
.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です
.CommandText = "getUserName" 'ストアド プロシージャ名を指定します
.CommandType = 4 'これがストアド プロシージャであることを示します
.Prepared = true '最初に SQL コマンドをコンパイルする必要があります
'戻り値は最初に宣言する必要があります
.Parameters.Append .CreateParameter("RETURN",2,4)
'それに応じて、次の 2 つのパラメータの宣言順序も逆になります。
.Parameters.append .CreateParameter("@ユーザー名",200,2,40)
.Parameters.append .CreateParameter("@ユーザーID",3,1,4,ユーザーID)
。実行する
で終わる
MyComm(0) = 1 の場合
ユーザー名 = MyComm(1)
それ以外
UserName = "このユーザーは存在しません"
終了する場合
Set MyComm = Nothing
6. パラメーターとレコードセットを同時に返すストアド プロシージャ
場合によっては、パラメーターとレコードセットを同時に返すストアド プロシージャが必要になります。たとえば、ページングにストアド プロシージャを使用する場合、次のようなパラメーターを返す必要があります。同時にレコードセットと合計データとして。以下はページング用のストアド プロシージャです。
/*SP6*/
プロシージャの作成 dbo.getUserList
@iPageCount int OUTPUT, --総ページ数
@iPage int, -- 現在のページ番号
@iPageSize int -- ページあたりのレコード数
として
ノーカウントをオンに設定する
始める
-- 一時テーブルの作成
create table #t (ID int IDENTITY, --auto-increment field
ユーザーID int、
ユーザー名 varchar(40))
-- 一時テーブルにデータを書き込みます
#t に挿入
dbo.[UserInfo] からユーザー ID、ユーザー名を選択します
ユーザー ID による順序
-- レコードの総数を取得します。
@iRecordCount int を宣言します
set @iRecordCount = @@rowcount
-- 合計ページ数を決定します
IF @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)
それ以外
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
-- 要求されたページ番号が総ページ数より大きい場合、最後のページが表示されます。
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount
-- 現在のページの始まりと終わりを決定します
DECLARE @iStart int --start レコード
DECLARE @iEnd int --end レコード
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1
-- 現在のページ レコードを取得します
select * from #t where ID>@iStart および ID<@iEnd
--一時テーブルを削除します
DROP TABLE #t
-- レコードの合計数を返します。
@iRecordCount を返す
終わり
上記のストアド プロシージャでは、
go は
現在のページ番号とページごとのレコード数を入力し、現在のページのレコード セット、合計ページ数、および合計レコード数を返します。より一般的には、レコードの総数が戻り値として返されます。以下はストアド プロシージャを呼び出す ASP コードです (特定のページング操作は省略されています)。
'**ページング ストアド プロシージャを呼び出す**
DIM ページ現在、ページサイズ、ページ数、レコード数
DIM MyComm、MyRst
pagenow = リクエスト("pn")
'自然数を検証するために使用されるカスタム関数
CheckNar(pagenow) = false の場合、pagenow = 1
ページサイズ = 20
Set MyComm = Server.CreateObject("ADODB.Command")
withMyComm
.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です
.CommandText = "getUserList" 'ストアドプロシージャ名を指定
.CommandType = 4 'これがストアド プロシージャであることを示します
.Prepared = true '最初に SQL コマンドをコンパイルする必要があります
'戻り値(総レコード数)
.Parameters.Append .CreateParameter("RETURN",2,4)
'出力パラメータ(総ページ数)
.Parameters.Append .CreateParameter("@iPageCount",3,2)
'入力パラメータ(現在のページ番号)
.Parameters.append .CreateParameter("@iPage",3,1,4,pagenow)
'入力パラメータ(ページあたりのレコード数)
.Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)
SetMyRst = .Execute
で終わる
if MyRst.state = 0 then 'データは取得されませんでした。MyRst は閉じられています
レコード数 = -1
それ以外
MyRst.close '注: パラメーター値を取得するには、最初にレコードセット オブジェクトを閉じる必要があります
レコード数 = MyComm(0)
ページ数 = MyComm(1)
if cint(pagenow)>=cint(pagecount) then pagenow=pagecount
終了する場合
Set MyComm = Nothing
'以下のレコードを表示
レコード数 = 0 の場合
応答。「記録なし」と書き込みます。
elseif レコード数 > 0 then
MyRst.open
MyRst.EOFまで行う
...
ループ
'以下はページング情報を表示します
...
else 'レコード数=-1
Response.「パラメータエラー」と書き込みます
に関して
、説明が必要な点が 1 つだけあります。レコードセットとパラメータを同時に返す場合、パラメータを取得したい場合は、最初にレコードセットを閉じ、その後レコードセットを開く必要があります。レコードセットを使用します。
7. 複数のレコード セットを返すストアド プロシージャ
この記事で最初に紹介するのは、レコード セットを返すストアド プロシージャです。 ASP では、ストアド プロシージャが複数のレコード セットを返す必要がある場合がありますが、これらのレコード セットを同時に取得するにはどうすればよいでしょうか。この問題を説明するために、userinfo テーブルに usertel と usermail という 2 つのフィールドを追加し、ログインしたユーザーのみがこれら 2 つのコンテンツを表示できるように設定します。
/*SP7*/
プロシージャの作成 dbo.getUserInfo
@userid int、
@checkloginビット
として
ノーカウントをオンに設定する
始める
@userid が null または @checklogin が null の場合、return
ユーザー名を選択してください
dbo より。[usrinfo]
ここで、ユーザーID=@ユーザーID
-- ログインしているユーザーの場合は、usertel と usermail を取得します。
@checklogin=1の場合
ユーザーテル、ユーザーメールを選択します
dbo より。[ユーザー情報]
ここで、ユーザーID=@ユーザーID
戻る
終わり
以下
は ASP コードです。
'**複数のレコードセットを返すストアド プロシージャを呼び出す**
DIM チェック lg、ユーザー ID、ユーザー名、ユーザー電話番号、ユーザーメール
DIM MyComm、MyRst
ユーザーID = 1
'checklogin() は、訪問者がログインしているかどうかを判断するカスタム関数です
checklg = checklogin()
Set MyComm = Server.CreateObject("ADODB.Command")
withMyComm
.ActiveConnection = MyConStr 'MyConStr はデータベース接続文字列です。CommandText = "getUserInfo" 'ストアド プロシージャ名を指定します。CommandType = 4 'これがストアド プロシージャであることを示します。Prepared = true '最初に SQL コマンドをコンパイルする必要があります。パラメータ.append .CreateParameter ("@userid",3,1,4,UserID)
.Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)
SetMyRst = .Execute
で終わる
Set MyComm = Nothing
'最初のレコードセットから値を取得します
ユーザー名 = MyRst(0)
' 2 番目のレコードセットから値を取得します
MyRst が Nothing でない場合は、
Set MyRst = MyRst.NextRecordset()
ユーザーテル = MyRst(0)
UserMail = MyRst(1)
終了する場合
Set MyRst = Nothing
上記のコードでは、Recordset オブジェクトの NextRecordset メソッドを使用して、ストアド プロシージャから返される複数のレコード セットを取得します。
これまで、この記事では、ASP がストアド プロシージャを呼び出すさまざまな状況について比較的包括的に説明してきました。最後に、ASP プログラムで複数のストアド プロシージャを呼び出すさまざまな方法について説明します。
ASP プログラムでは、少なくとも次の 3 つのメソッドで複数のストアド プロシージャを呼び出すことができます。
1. 複数のコマンド オブジェクトを作成する
ディムマイコム
Set MyComm = Server.CreateObject("ADODB.Command")
'ストアド プロシージャ 1 を呼び出します
...
MyComm = 何も設定しない
Set MyComm = Server.CreateObject("ADODB.Command")
'ストアド プロシージャ 2 を呼び出します
...
MyComm = 何も設定しない
......
2. Command オブジェクトのみを作成し、通話を終了するときにそのパラメータをクリアします。
ディムマイコム
Set MyComm = Server.CreateObject("ADODB.Command")
'ストアド プロシージャ 1 を呼び出します
……
'パラメータをクリアします (パラメータが 3 つあると仮定します)
MyComm.Parameters.delete 2
MyComm.Parameters.delete 1
MyComm.Parameters.delete 0
'ストアド プロシージャ 2 を呼び出してパラメータをクリアします
...
Set MyComm = Nothing
このとき、パラメータをクリアする順序とパラメータを宣言する順序が逆であることに注意してください。理由はわかりません。
3. Parameters データ コレクションの Refresh メソッドを使用して、Parameter オブジェクトをリセットします。
ディムマイコム
Set MyComm = Server.CreateObject("ADODB.Command")
'ストアド プロシージャ 1 を呼び出します
……
'パラメータ データ コレクションに含まれるすべてのパラメータ オブジェクトをリセットします
MyComm.Parameters.Refresh
'ストアド プロシージャ 2 を呼び出します
……
Set MyComm = Nothing
一般に、オブジェクトを繰り返し作成することは効率が低い方法であると考えられていますが、テスト (テスト ツールは Microsoft Application Center Test) 後、結果は予期せぬものになります:
方法 2 >= 方法 1 >> 方法 3
実行速度方法 2 の場合、方法 1 以上 (最大約 4% 高速)、これら 2 つの方法の実行速度は方法 3 (最大 130%) よりもはるかに速いため、次のような場合には方法 1 を使用することをお勧めします。パラメータが多く、パラメータが少ない場合は方法 1 を使用します 2。