ASP がパラメーターを使用してストアド プロシージャを呼び出すためのいくつかの方法
最近、多くの友人から、ASP がパラメーターを使用してストアド プロシージャを呼び出すためのいくつかの方法について簡単に紹介します。
1. これは最も単純なメソッドでもあり、2 つの入力パラメータがあり、戻り値はありません。
set connection =server.createobject("adodb.connection")
接続.DSN を開く
Connection.Execute "procname varvalue1, varvalue2"
'すべてのオブジェクトをクリアしてリソースを解放します
接続.閉じる
接続=なしを設定します
2. Recordset セットを返す場合:
set connection =server.createobject("adodb.connection")
接続.DSN を開く
set rs =server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",connection
'すべてのオブジェクトをクリアしてリソースを解放します
rs.close
接続.閉じる
setrs=なし
接続=なしを設定します
3. 上記 2 つのメソッドはいずれも戻り値を持てません (Recordset を除く)。戻り値を取得したい場合は、Command メソッドを使用する必要があります。
まず、戻り値には2種類あります。 1 つは、C や VB の関数の戻り値と同じように、ストアド プロシージャで値を直接返す方法で、もう 1 つは複数の値を返す方法で、これらの値を格納する変数名を最初に呼び出しパラメータで指定する必要があります。 。
この例では、複数のパラメータ、入力パラメータ、出力パラメータ、戻りレコード セット、および直接戻り値を処理する必要があります (十分に完成していますか?)
ストアド プロシージャは次のとおりです。
pubs を使用します。
GO
-- ストアド プロシージャを作成する
プロシージャ sp_PubsTest を作成します
-- 3 つのパラメータ変数を定義します。3 番目の変数に注意してください。特別なマークは出力用です。
@au_lname varchar (20)、
@intID int、
@intIDOut int
として
出力@intIDOut = @intID + 1
SELECT *
著者から
WHERE au_lname LIKE @au_lname + '%'
-- 値を直接返します
戻り値 @intID + 2
このストアド プロシージャを呼び出す ASP プログラムは次のとおりです:
<%@ Language=VBScript %>
<%
ディムコマンドSP
ディマドRS
Dim adCmdSPStoredProc
ディム adParamReturnValue
薄暗い広告パラメータ入力
ディム adParamOutput
薄暗い広告整数
ディム・イヴァル
薄暗い楕円形
ディム・アドフィールド
Dim adVarChar
'これらの値は VB で事前定義された定数であり、直接呼び出すことができますが、VBScript では事前定義されていません
adCmdSPStoredProc = 4
adParamReturnValue = 4
adParaminput = 1
adParam出力 = 2
adInteger = 3
adVarChar = 200
iVal = 5
oVal = 3
'コマンドオブジェクトの作成
set CmdSP = Server.CreateObject("ADODB.Command")
'リンクを作成します
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
'コマンド オブジェクト呼び出し名を定義します
CmdSP.CommandText = "sp_PubsTest"
'コマンド呼び出しの種類をストアド プロシージャに設定します (adCmdSPStoredProc = 4)
CmdSP.CommandType = adCmdSPStoredProc
'コマンド オブジェクトにパラメータを追加します
'直接の戻り値を持つストアド プロシージャを定義します。デフォルト値は 4 です。
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
'文字入力パラメータを定義する
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
'整数入力パラメータを定義します
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
'整数出力パラメータを定義します
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)
'ストアド プロシージャを実行し、返されたレコード セットを取得します
adoRS = CmdSP.Execute を設定します
' 各レコードを出力します。フィールドは仮想的なものなので無視できます。
adoRS.Fields の各 adoField の
adoRS.EOF ではない間
Response.Write adoField.Name & "= & adoField.Value & "<br>" & vbCRLF
次
応答。「<br>」と書いてください。
adoRS.MoveNext
Wend
' 2 つの出力値を出力します。
Response.Write "<p>@intIDOut = " & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>戻り値 = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
「一般的な掃除」
adoRS = 何も設定しない
CmdSP.ActiveConnection = なしを設定します
CmdSP = 何も設定しない
%>
-------------------------------------------------- -------------------------------------------------- --------------------------------
ASP で SQL サーバーのストアド プロシージャを呼び出すと、プログラムの実行速度が向上します。
1. ストレージを呼び出す このプロセスの一般的な方法では、SQL サーバーにストアド プロシージャ dt_users が存在することを前提としています。
作成プロシージャ [dbo].[dt_users]
として
ユーザーから * を選択
戻る
行く
1 つ目の方法は、コマンド オブジェクトを使用せず、レコードセット オブジェクトを直接使用する方法です。
set rs=server.createobject("adodb.recordset")
sql="dt_users を実行"
rs.open sql,conn,1,1 で、2 番目のメソッドがコマンド オブジェクトを使用するようにします。
set comm=server.createobject("adodb.command")
comm.commantype=4
comm.activeconnection=conn を設定します
comm.commandtext="dbo.dt_users"
set rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2. ストアド プロシージャにパラメータを渡します。ストアド プロシージャにパラメータがなく、SQL ステートメントが 1 つしかない場合、ストアド プロシージャを呼び出す利点は得られません。
たとえば、bbs クエリの場合、作成者とトピックごとにクエリを実行できます。次に、次のようにストアド プロシージャを作成できます。
パラメータキーワードはキーワード、chooseはクエリの選択方法です。
プロシージャの作成 [dbo].[dt_bbs]
@キーワード varchar(20)=null、
@choose int=null
として
@選択=1の場合
@keyword のような名前の bbs から * を選択します
それ以外
select * from bbs where subject like @keyword
戻る
行く
このようにして、ストアド プロシージャを呼び出すときは、ASP でプログラムを作成して最初のメソッドを使用するのではなく、パラメーターを渡すだけで済みます。
set rs=server.createobject("adodb.recordset")
sql="exec dt_bbs '"&キーワード&"',"&選択&""
rs.open SQL,conn,1,1
2 番目の方法を使用します。
set comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
comm.activeconnection=conn を設定します
comm.commandtext="dbo.dt_bbs"
set rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.オープン通信,,1,1