หลายวิธีสำหรับ ASP ในการเรียกขั้นตอนที่เก็บไว้ด้วยพารามิเตอร์
เมื่อเร็ว ๆ นี้ มีเพื่อน ๆ มากมายถามเกี่ยวกับการเรียกขั้นตอนที่เก็บไว้ ต่อไปนี้เป็นคำแนะนำโดยย่อเกี่ยวกับหลายวิธีสำหรับ ASP ในการเรียกขั้นตอนที่เก็บไว้ด้วยพารามิเตอร์
1. นี่เป็นวิธีที่ง่ายที่สุดด้วย โดยมีพารามิเตอร์อินพุตสองตัวและไม่มีค่าส่งคืน:
ตั้งค่าการเชื่อมต่อ = server.createobject("adodb.connection")
การเชื่อมต่อ เปิด DSN บางส่วน
การเชื่อมต่อดำเนินการ "procname varvalue1, varvalue2"
'ล้างวัตถุทั้งหมดเป็นศูนย์และปล่อยทรัพยากร
การเชื่อมต่อ.ปิด
ตั้งค่าการเชื่อมต่อ=ไม่มีอะไร
2. หากคุณต้องการคืนชุดระเบียน:
ตั้งค่าการเชื่อมต่อ = server.createobject("adodb.connection")
การเชื่อมต่อ เปิด DSN บางส่วน
ตั้ง rs = server.createobject ("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2" การเชื่อมต่อ
'ล้างวัตถุทั้งหมดให้ไม่มีอะไรและปล่อยทรัพยากร
฿.ปิด
การเชื่อมต่อ.ปิด
setrs=ไม่มีอะไร
ตั้งค่าการเชื่อมต่อ=ไม่มีอะไร
3. ทั้งสองวิธีข้างต้นไม่สามารถมีค่าส่งคืนได้ (ยกเว้น Recordset) หากคุณต้องการรับค่าส่งคืน คุณต้องใช้วิธี Command
ประการแรก มีค่าส่งคืนสองประเภท วิธีหนึ่งคือการส่งคืนค่าโดยตรงในกระบวนงานที่เก็บไว้ เช่นเดียวกับค่าส่งคืนฟังก์ชันของ C และ VB อีกอย่างคือการส่งคืนค่าหลายค่า และต้องระบุชื่อตัวแปรเพื่อจัดเก็บค่าเหล่านี้ในพารามิเตอร์การเรียกก่อน .
ตัวอย่างนี้ต้องจัดการกับพารามิเตอร์หลายตัว พารามิเตอร์อินพุต พารามิเตอร์เอาต์พุต ชุดบันทึกส่งคืน และค่าส่งคืนโดยตรง (สมบูรณ์เพียงพอหรือไม่)
ขั้นตอนการจัดเก็บมีดังนี้:
ใช้ผับ
GO
- สร้างขั้นตอนการจัดเก็บ
สร้างโพรซีเดอร์ sp_PubsTest
- กำหนดตัวแปรพารามิเตอร์สามตัว ให้ความสนใจกับตัวที่สาม เครื่องหมายพิเศษสำหรับเอาต์พุต
@au_lname วาร์ชาร์ (20),
@intID อินท์
@intIDOut int OUTPUT
ตามที่
เลือก @intIDOut = @intID + 1
SELECT *
จากผู้เขียน
โดยที่ au_lname LIKE @au_lname + '%'
--ส่งคืนค่าโดยตรง
กลับ @intID + 2
โปรแกรม asp ที่เรียกกระบวนงานที่เก็บไว้นี้เป็นดังนี้:
<%@ Language=VBScript %>
-
Dim CmdSP
ดิมาโดรเอส
หรี่ adCmdSPStoredProc
Dim adParamReturnValue
ดิมแอดพารามินพุต
Dim adParamOutput
Dim adInteger
ดิม ไอวาล
ดิมโอวัล
ลืมไปฟิลด์
Dim adVarChar
'ค่าเหล่านี้เป็นค่าคงที่ที่กำหนดไว้ล่วงหน้าใน VB และสามารถเรียกได้โดยตรง แต่ไม่ได้กำหนดไว้ล่วงหน้าใน VBScript
adCmdSPStoredProc = 4
adParamReturnValue = 4
โฆษณาพารามินพุต = 1
adParamOutput = 2
จำนวนเต็มโฆษณา = 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.EOF
สำหรับแต่ละ adoField ใน adoRS.Fields
การตอบกลับเขียน adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
ต่อไป
ตอบกลับเขียน "<br>"
adoRS.MoveNext
Wend
'พิมพ์ค่าเอาต์พุตสองค่า:
Response.Write "<p>@intIDOut = " & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>ค่าส่งคืน = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
'ทำความสะอาดทั่วไป
ตั้งค่า AdRS = ไม่มีเลย
ตั้งค่า CmdSP.ActiveConnection = ไม่มีเลย
ตั้งค่า CmdSP = ไม่มีเลย
-
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------
การเรียกขั้นตอนการจัดเก็บของเซิร์ฟเวอร์ sql ใน asp สามารถเร่งความเร็วการทำงานของโปรแกรมได้
1. เรียกที่เก็บข้อมูล วิธีการทั่วไปของกระบวนการถือว่ามีขั้นตอนที่เก็บไว้ dt_users ในเซิร์ฟเวอร์ sql:
สร้างขั้นตอน [dbo] [dt_users]
เช่น
เลือก * จากผู้ใช้
กลับ
ไป
วิธีแรกไม่ได้ใช้วัตถุคำสั่ง แต่ใช้วัตถุชุดระเบียนโดยตรง
ตั้งค่า rs=server.createobject("adodb.recordset")
sql = "exec dt_users"
rs.open sql,conn,1,1 เพื่อให้วิธีที่สองคือการใช้วัตถุคำสั่ง
ตั้งค่า comm=server.createobject("adodb.command")
commantype=4
ตั้งค่า comm.activeconnection=conn
comm.commandtext="dbo.dt_users"
ตั้งค่า rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2. ส่งพารามิเตอร์ไปยังโพรซีเดอร์ที่เก็บไว้ หากไม่มีพารามิเตอร์ในโพรซีเดอร์ที่เก็บไว้ แต่มีคำสั่ง SQL เดียว ข้อดีของการเรียกโพรซีเดอร์ที่เก็บไว้จะไม่ปรากฏ!
ตัวอย่างเช่น สำหรับการสืบค้น bbs คุณสามารถสืบค้นตามผู้เขียนและหัวข้อได้! จากนั้นคุณสามารถสร้างขั้นตอนการจัดเก็บได้ดังนี้:
พารามิเตอร์คีย์เวิร์ดคือคีย์เวิร์ด และเลือกเป็นวิธีการเลือกคิวรี
สร้างขั้นตอน [dbo].[dt_bbs]
@คำหลัก varchar(20)=null,
@เลือก int=null
เช่น
ถ้า @choose=1
เลือก * จาก bbs โดยที่ชื่อเช่น @keyword
อื่น
เลือก * จาก bbs โดยที่ subject เช่น @keyword
กลับ
ไป
ด้วยวิธีนี้ เมื่อเราเรียกใช้ Stored Procedure เราเพียงแต่ต้องส่งพารามิเตอร์ แทนที่จะเขียนโปรแกรมใน ASP และใช้วิธีแรก:
ตั้งค่า rs=server.createobject("adodb.recordset")
sql = "exec dt_bbs '"&คำหลัก&"',"&เลือก&""
rs.open sql,conn,1,1
ใช้วิธีที่สอง:
ตั้งค่า comm=server.createobject("adodb.command")
commantype=4
comm.Parameters.ผนวก comm.CreateParameter("@keyword",adChar,adParamInput,50,คำหลัก)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,เลือก)
ตั้งค่า comm.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
ตั้งค่า rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.เปิดคอม,,1,1