ينفذ Asp sqlserver الإجراء المخزن لإرجاع الحل المؤقت الذي مفاده أن العملية غير مسموح بها عند إغلاق كائن مجموعة السجلات. إذا كان لديك طريقة أفضل، من فضلك قل لي. إذا كنت ترغب في الحصول على القيمة المرجعة، فأنت بحاجة إلى استخدام طريقة الأمر.
أولاً، هناك نوعان من قيم الإرجاع. أحدهما هو إرجاع قيمة مباشرة في الإجراء المخزن، تمامًا مثل قيمة إرجاع الدالة C وVB، والآخر هو إرجاع قيم متعددة، ويجب تحديد أسماء المتغيرات لتخزين هذه القيم في معلمات الاستدعاء أولاً .
يحتاج هذا المثال إلى التعامل مع معلمات متعددة ومعلمات الإدخال ومعلمات الإخراج ومجموعات سجلات الإرجاع وقيمة الإرجاع المباشرة (هل هي كاملة بما فيه الكفاية؟)
الإجراء المخزن هو كما يلي:
انسخ رمز الكود كما يلي:
استخدام الحانات
يذهب
- إنشاء إجراء مخزن
إنشاء إجراء sp_PubsTest
- تحديد ثلاثة متغيرات للمعلمات لاحظ أن المعلمة الثالثة تم تمييزها خصيصًا للإخراج.
@au_lname فارتشار (20)،
@intID int،
@intIDOut int OUTPUT
مثل
حدد @intIDOut = @intID + 1
يختار *
من المؤلفين
حيث au_lname مثل @au_lname + ''%''
- إرجاع القيمة مباشرة
العودة @intID + 2
برنامج asp الذي يستدعي هذا الإجراء المخزن هو كما يلي:
انسخ رمز الكود كما يلي:
<%@ اللغة=VBScript %>
<%
خافت كمدسب
ديمادو آر إس
خافت adCmdSPStoredProc
خافت adParamReturnValue
خافت adParaminput
خافت adParamOutput
خافت عدد صحيح
خافت iVal
خافت البيضاوي
حقل اللغط الخافت
خافت adVarChar
'هذه القيم هي ثوابت محددة مسبقًا في VB ويمكن استدعاؤها مباشرة، ولكنها غير محددة مسبقًا في VBScript
أدكمدسبسستوريدبروك = 4
قيمة adParamReturnValue = 4
معلمة الإدخال = 1
أدبارامأوتبوت = 2
عدد صحيح = 3
أدفارتشار = 200
ايفال = 5
البيضاوي = 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
''طباعة كل سجل الحقول افتراضية ويمكن تجاهلها.
بينما لا أعشقRS.EOF
لكل adoField في adoRS.Fields
Response.Write adoField.Name & = & adoField.Value & <br> & vbCRLF
التالي
الرد.اكتب<br>
adoRS.MoveNext
ويند
''طباعة قيمتين الإخراج:
Response.Write <p>@intIDOut = & CmdSP.Parameters(@intIDOut).Value & </p>
Response.Write <p>قيمة الإرجاع = & CmdSP.Parameters(RETURN_VALUE).Value & </p>
''تنظيف
تعيين adoRS = لا شيء
تعيين CmdSP.ActiveConnection = لا شيء
تعيين كمدسب = لا شيء
%>
عند استخدام asp لاستدعاء الإجراء المخزن وإرجاع مجموعة السجلات، يستمر في الإبلاغ عن الخطأ الذي مفاده أن العملية غير مسموح بها عند إغلاق الكائن. لقد بحثت في الكثير من الأسئلة، لكن لم أتمكن من العثور على الحل الصحيح قطعة من التعليمات البرمجية الأكثر موثوقية.
أخيرًا، وجدت أن المشكلة حدثت في الإجراء المخزن. لم تكن هناك مشكلة في الإجراء المخزن في المثال، ولكن عندما استخدمت الإجراء المخزن الخاص بي، حدث خطأ.
الحل النهائي هو وضعه في الإجراء المخزن الذي أستخدمه
قبل كل عبارة إدراج، أضف عددًا محددًا على الجملة، أي أضف جملة داخل حلقة المؤشر.
لم أتطرق إلى الأسباب المحددة بعد، ويمكن لأي شخص يعرف أن يشير إلى ذلك.