0

Create と Update での ADO とストアド プロシージャの使用

クラシック ASP、SQL サーバー 2008 R2 を使用しています。私はこのようなADOを使用して作成と更新を行ってきました:

sSQL = "select <column list> from <table>"

set rsMyTable = Server.CreateObject ("ADODB.Recordset")
rsMyTable.cursorType = 2 
sMyTable.LockType = 3 
rsMyTable.open sqlstr, objMyConnection     
rsMyTable.addnew

rsMyTable("Mycol1") = myValue1
rsMyTable("Mycol2") = myValue2
rsMyTable.update
rsMyTable.close
set rsMyTable = nothing

更新が必要なテーブルがいくつかあり、更新ごとに異なる列セットが更新されます。このように ADO を使用するのは悪い習慣ですか? ADO を使用する代わりに、更新ごとにストアド プロシージャを作成し、次のように ADO を使用してストアド プロシージャにパラメーターを渡す必要があります。

sqlstr = "myUpdateProcedure"
set objCmd = Server.CreateObject("ADODB.Command")
set objParam = Server.CreateObject("ADODB.Parameter")

set objCmd.ActiveConnection = objConnection
objCmd.commandText = sqlstr
objCmd.CommandType = 4   ''stored proc.

set objParam = objCmd.CreateParameter("param1", 19, 1, , value1)
objCmd.Parameters.Append objParam
set objParam = objCmd.CreateParameter("param2", 200, 1, <maxlength>, value2)
objCmd.Parameters.Append objParam
....
set rsTemp = Server.CreateObject("ADODB.Recordset")
rsTemp.CursorLocation = adUseClient
rsTemp.CursorType = adOpenKeyset
set rsTemp = objCmd.Execute()

....

''cleanup.
set objParam = Nothing
set objCmd = Nothing
Set rsTemp = Nothing

アドバイスをいただければ幸いです。
ありがとう。

4

1 に答える 1

0

すべての更新を実行するストアド プロシージャを作成します。その後、トランザクションを使用して、すべての更新が実行またはロールバックされるようにすることができます。つまり、現在 VBScript にあるロジックを T-SQL に移動します。

このように ADO を使用するのは古風であり、パフォーマンスも良くありません。

渡すパラメーターが多い場合や更新する行が複数ある場合は、ストアド プロシージャへのトランスポートとして XML を使用することを検討してください。

于 2012-07-12T17:58:51.527 に答える