عدة طرق لـ ASP لاستدعاء الإجراءات المخزنة باستخدام المعلمات
مؤخرًا، سأل العديد من الأصدقاء عن استدعاء الإجراءات المخزنة. فيما يلي مقدمة مختصرة لعدة طرق لـ ASP لاستدعاء الإجراءات المخزنة باستخدام المعلمات.
1. هذه أيضًا أبسط طريقة، مع معلمتين إدخال وبدون قيمة إرجاع:
تعيين الاتصال = server.createobject("adodb.connection")
اتصال.فتح بعضDSN
Connection.Execute "procname varvalue1, varvalue2"
'مسح كافة الكائنات إلى لا شيء وتحرير الموارد
اتصال.إغلاق
ضبط الاتصال = لا شيء
2. إذا كنت تريد إرجاع مجموعة السجلات:
تعيين الاتصال = server.createobject("adodb.connection")
اتصال.فتح بعضDSN
مجموعة rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2"، الاتصال
"مسح كافة الكائنات إلى لا شيء وتحرير الموارد"
rs. Close
اتصال.إغلاق
setrs=لا شيء
ضبط الاتصال = لا شيء
3. لا يمكن أن تحتوي أي من الطريقتين المذكورتين أعلاه على قيمة إرجاع (باستثناء مجموعة السجلات) إذا كنت ترغب في الحصول على قيمة الإرجاع، فأنت بحاجة إلى استخدام أسلوب الأوامر.
أولاً، هناك نوعان من قيم الإرجاع. أحدهما هو إرجاع قيمة مباشرة في الإجراء المخزن، تمامًا مثل قيمة إرجاع الدالة C وVB، والآخر هو إرجاع قيم متعددة، ويجب تحديد أسماء المتغيرات لتخزين هذه القيم في معلمات الاستدعاء أولاً .
يحتاج هذا المثال إلى التعامل مع معلمات متعددة ومعلمات الإدخال ومعلمات الإخراج ومجموعات سجلات الإرجاع وقيمة الإرجاع المباشرة (هل هي كاملة بما فيه الكفاية؟)
الإجراء المخزن كما يلي:
استخدم الحانات
اذهب
- إنشاء إجراء مخزن
إنشاء إجراء sp_PubsTest
- تحديد ثلاثة متغيرات للمعلمات، والانتباه إلى المعلمة الثالثة، العلامة الخاصة للإخراج
@au_lname فارتشار (20)،
@intID int،
@intIDOut int OUTPUT
AS
SELECT @intIDOut = @intID + 1
SELECT *
من المؤلفين
حيث au_lname مثل @au_lname + '%'
- قم بإرجاع قيمة مباشرة
العودة @intID + 2
برنامج asp الذي يستدعي هذا الإجراء المخزن هو كما يلي:
<%@ Language=VBScript %>
<%
خافت كمدسب
ديمادو آر إس
خافت adCmdSPStoredProc
خافت adParamReturnValue
خافت adParaminput
خافت adParamOutput
خافت عدد صحيح
خافت iVal
خافت البيضاوي
حقل اللغط الخافت
Dim adVarChar
'هذه القيم هي ثوابت محددة مسبقًا في VB ويمكن استدعاؤها مباشرة، ولكنها غير محددة مسبقًا في VBScript
أدكمدسبسستوريدبروك = 4
قيمة adParamReturnValue = 4
معلمة الإدخال = 1
أدبارامأوتبوت = 2
عدد صحيح = 3
adVarChar = 200
iVal = 5
oVal = 3
'إنشاء كائن أمر
اضبط 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
Response.Write 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>"
'التنظيف العام
تعيين adoRS = لا شيء
تعيين CmdSP.ActiveConnection = لا شيء
تعيين كمدسب = لا شيء
%>
-------------------------------------------------- -------------------------------------------------- --------------------------------
يمكن أن يؤدي استدعاء الإجراء المخزن لخادم 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")
comm.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
مثل
إذا @ اختر = 1
حدد * من bbs حيث يكون الاسم مثل @keyword
آخر
حدد * من bbs حيث يكون الموضوع مثل @keyword
يعود
يذهب
بهذه الطريقة، عندما نستدعي الإجراء المخزن، نحتاج فقط إلى تمرير المعلمات، بدلاً من كتابة برنامج في asp واستخدام الطريقة الأولى:
مجموعة rs=server.createobject("adodb.recordset")
sql="exec dt_bbs '"&الكلمة الرئيسية&"'"&اختيار&""
rs.open SQL، كون، 1،1
استخدم الطريقة الثانية:
تعيين comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append 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.open بالاتصالات،،1،1