ASP やストアド プロシージャ (Stored Procedure) に関する記事は数多くありますが、著者が実際に実践しているかどうかは疑問です。私が初心者だった頃、多くの関連情報を調べたところ、提供されている方法の多くが実際には同じではないことがわかりました。単純なアプリケーションの場合、これらのマテリアルは役立つかもしれませんが、基本的に同じで相互にコピーされるため、これらのマテリアルはこれに限定されます。少し複雑なアプリケーションの場合は、すべてが不明瞭になります。
ここで、基本的にストアド プロシージャを呼び出して SQL Server にアクセスします。次のテキストは完全に正しいとは保証できませんが、実践の概要であることを願っています。
ストアド プロシージャは、実行可能オブジェクトとしてデータベースに保存された 1 つ以上の SQL コマンドです。
定義は常に抽象的です。ストアド プロシージャは、実際には特定の操作を完了できる SQL ステートメントのセットですが、このステートメントのセットはデータベースに配置されます (ここでは SQL Server についてのみ説明します)。 ASP でストアド プロシージャを作成し、ストアド プロシージャを呼び出すと、SQL ステートメントと ASP コードの混在を避けることができます。これを行うことには少なくとも 3 つの利点があります。
まず、効率が大幅に向上します。ストアド プロシージャ自体の実行速度は非常に高速であり、ストアド プロシージャを呼び出すことでデータベースとの対話の数を大幅に減らすことができます。
第二に、安全性の向上です。 ASP コードに SQL ステートメントを混在させると、コードが侵害されると、ライブラリ構造も侵害されることになります。
第三に、SQL ステートメントの再利用に役立ちます。
ASP では、ストアド プロシージャは通常、コマンド オブジェクトを通じて呼び出されます。状況に応じて、この記事では他の呼び出し方法も紹介します。説明の便宜上、ストアドプロセスの入力と出力に従って次の簡単な分類が行われます。
1. 単一のレコード セットのみを返すストアド プロシージャ
次のストアド プロシージャがあるとします (この記事の目的は T-SQL 構文を説明することではないため、ストアド プロシージャはコードのみを示し、説明は省略します)
。
プロシージャの作成 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 が一般的なコマンド タイプであることを示します
2 は、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) はパラメータのデータ型を示します。具体的な型コードについては、ADO リファレンスを参照してください。
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: 戻り値
上記の ASP コードは、最も複雑なコードであると言えます。実際には、
Set Mypara = MyComm.CreateParameter("RETURN",2,
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 コマンドをコンパイルする必要があります
.Parameters.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 '最初に SQL コマンドをコンパイルする必要があります
ユーザーID = 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 = "このユーザーは存在しません"
終了する場合
MyComm = 何も設定しない
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 コマンドをコンパイルする必要があります
.Parameters.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. 複数のコマンド オブジェクトを作成する
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'ストアド プロシージャ 1 を呼び出します
...
MyComm = 何も設定しない
Set MyComm = Server.CreateObject("ADODB.Command")
'ストアド プロシージャ 2 を呼び出します
...
MyComm = 何も設定しない
......
2. Command オブジェクトのみを作成し、通話を終了するときにそのパラメータ
DIM MyComm
をクリアします。
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. パラメータ データ コレクションの Refresh メソッドを使用して、パラメータ オブジェクト
DIM MyComm
をリセットします。
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、そうでない場合は方法 2 を使用します。
ASP でストアド プロシージャを呼び出す際の私の表面的な経験の一部を最終的に文書化するのに 1 日かかりました。その中には、結果だけが分かっていて原因が分からないものもあり、間違っているものもあるかもしれませんが、これらは全て私個人の実践によるものです。読者の皆様、どうか批判的に受け止めてください。異なるご意見がございましたら、事前にお知らせください。