الموصى بها: ASP 3.0 البرمجة المتقدمة (اثنا عشر) 4.2.3 أمثلة على التعليمات التي تحتوي على جانب الخادم ، يوفر هذا القسم بعض الصفحات المثال التي يمكن استخدامها لتجربة مختلف عبارات تحتوي على جانب الخادم. افتح الدليل الفرعي لعينة صفحة الويب الفصل 04 ، وعرض توجيهات SSI وكائن خادم ASP & rdqu
9.2.3 الإجراءات المخزنةاستخدام الإجراءات المخزنة هو منطقة يتم فيها تطبيق كائنات الأوامر. الإجراءات المخزنة (التي تسمى أحيانًا استعلامات التخزين) هي عبارات استعلام SQL التي يتم تحديدها مسبقًا في قاعدة بيانات.
لماذا يجب عليك إنشاء واستخدام الإجراءات المخزنة بدلاً من استخدام سلاسل SQL مباشرة في الكود الخاص بك؟ هناك عدة أسباب رئيسية:
تم تجميع الإجراءات المخزنة بواسطة قاعدة البيانات. ينتج عن هذا خطة تنفيذ ، وبالتالي فإن قاعدة البيانات تعرف بالضبط ما ستفعله ، وبالتالي تسريع تنفيذ العملية.
عادةً ما يتم تخزين الإجراءات المخزنة مؤقتًا بواسطة قاعدة البيانات ، مما يجعلها تعمل بشكل أسرع لأنها غير مطلوبة للقراءة من القرص في هذا الوقت. لا تدعم جميع قواعد البيانات آلية التخزين المؤقت هذه. على سبيل المثال ، لا يدعم وصول Microsoft ذلك ، لكن SQL Server يدعمه.
من خلال تحديد أن الجداول في قاعدة البيانات لا يمكن تعديلها إلا عن طريق الإجراءات المخزنة ، يمكن ضمان أن تكون البيانات أكثر أمانًا. هذا يعني أنه لن يتم تنفيذ عمليات SQL الخطرة.
يمكن تجنب رمز ASP بالخلط مع عبارات SQL طويلة ، مما يجعل رمز ASP أسهل في الحفاظ عليه.
· يمكن تخزين جميع رمز SQL مركزيًا على الخادم.
· يمكن استخدام معلمات الإخراج في الإجراءات المخزنة للسماح بإرجاع مجموعة السجل أو القيم الأخرى.
بشكل عام ، تكون الإجراءات المخزنة دائمًا أسرع تقريبًا من عبارات SQL المماثلة.
لاستخدام الإجراءات المخزنة ، ما عليك سوى استخدام اسم الإجراء المخزن كنص أمر وتعيين النوع المقابل. على سبيل المثال ، ضع في اعتبارك المثال السابق لسعر الكتاب المحدث. إذا قمت بإنشاء إجراء مخزن على SQL Server ، فيمكنك كتابة التعليمات البرمجية:
إنشاء الإجراء USP_UPDATEPRICES
مثل
تحديث العناوين
حدد السعر = السعر * 1.10
حيث النوع = "الأعمال"
بالنسبة لقاعدة بيانات الوصول إلى Microsoft ، يمكن تحقيق نفس المهمة باستخدام عبارة استعلام تحديث بسيطة
لتشغيل هذا الإجراء المخزن في صفحة ويب ASP ، ما عليك سوى استخدام الكود التالي:
تعيين cmdupdate = server.createBject (adodb.command)
cmdupdate.activeconnection = strconn
cmDupDate.CommandText = USP_UPDatePrices
cmdupdate.CommandType = ADCMDStoredProc
cmdupdate.execute ، ، adexecutenorecords
هذا هو مجرد تشغيل إجراء مخزن. لا توجد عوائد مجموعة سجلات لأنه يتم تحديث البيانات فقط. من المهم أن تتذكر أنك لا تقوم بإنشاء مجموعات تسجيلات إلا إذا كنت بحاجة إليها حقًا.
على الرغم من أن هذا على ما يرام ، إلا أنه ليس مرنًا للغاية ، لأنه يتعامل فقط مع نوع واحد من الكتب. تتمثل الطريقة الأفضل في إنشاء عملية تتيح لنا اختيار نوع كتاب بحيث لا يتعين علينا إنشاء عملية لكل نوع من أنواع الكتب. أيضًا ، يمكن إزالة تحديث 10 ٪ الثابت ، مما يجعل مرونة أفضل. لذا ، كيف يمكنني فعل هذا؟ الأمر بسيط للغاية ، استخدم المعلمات.
1. المعلمة
المعلمات (أو المتغيرات) من الإجراءات المخزنة هي نفس الإجراءات والوظائف العامة. يمكن تمريرها إلى الوظيفة ، ويمكن للوظيفة استخدام قيمتها. الإجراءات المخزنة في SQL Server (نفس الشيء صحيح بالنسبة لقواعد البيانات الأخرى ، بما في ذلك الوصول) لها هذه الوظيفة.
من أجل إجراء الإجراءات المخزنة للتعامل مع أنواع متعددة من الكتب ، وحتى السماح للمستخدمين بتحديد زيادة (أو انخفاض) من الأسعار ، يجب إضافة بعض المعلمات:
إنشاء الإجراء USP_UPDATEPRICES
type char (12) ،
Percent Money
مثل
تحديث العناوين
حدد السعر = السعر * (1 percent / 100)
حيث النوع = type
الآن ، فإن الإجراء المخزن usp_updateprices يأخذ معلمتين:
· واحد هو نوع الكتاب (type).
واحد هو النسبة المئوية لتغيير أسعار الكتب (percent).
مثل وظائف VBScript ، هذه المعلمات هي متغيرات. ومع ذلك ، على عكس VBScript ولغات البرمجة النصية الأخرى ، فإن المتغيرات في لغات البرمجة النصية هذه كلها أنواع متغيرة ، في حين أن متغيرات SQL لها أنواع محددة (char ، المال ، إلخ). يجب اتباع مواصفات التسمية لمتغيرات SQL ، أي أن المتغير يجب أن يبدأ بالرمز @.
لاحظ أن لدينا نسب مئوية تم نقلها إلى هذه العملية كصاحب صحيح (مثل 10 يعني 10 ٪) بدلاً من قيمة كسور. هذا يجعل الإجراءات المخزنة أكثر سهولة.
2. مجموعة المعلمات
لذا ، يوجد الآن إجراء مخزن مع المعلمات ، ولكن كيف تسميه من خلال ADO؟ لقد رأينا كيفية استدعاء الإجراءات المخزنة دون معلمات مع كائنات الأوامر ، وفي الواقع ، لا يوجد فرق بينهما. الفرق هو استخدام مجموعات المعلمات.
تحتوي مجموعة المعلمات على كائنات معلمة لكل معلمة في الإجراء المخزن. ومع ذلك ، لا يعرف ADO تلقائيًا ماهية هذه المعلمات ، لذلك يجب إنشاءها باستخدام طريقة CreateParameter ، في النموذج التالي:
تعيين المعلمة = command.createparameter (الاسم ، [type] ، [Direction] ، [size] ، [value])
وترد المعلمات والأوصاف في الجدول 9-3:
الجدول 9-3 المعلمات وأوصاف طريقة CreateParameter
المعلمة
يوضح
اسم
اسم المعلمة. هذا هو اسم المعلمة في مجموعة المعلمات ، وليس اسم المعلمة في الإجراء المخزن. ومع ذلك ، فإن استخدام نفس الاسم هو ممارسة جيدة
يكتب
نوع بيانات المعلمة. يمكن أن يكون ثابتًا ، انظر التذييل للحصول على التفاصيل
اتجاه
يشير اتجاه المعلمة إلى ما إذا كانت المعلمة توفر معلومات إلى الإجراء المخزن أو يقوم الإجراء المخزن بإرجاع المعلومات إلى ADO. يمكن أن تكون واحدة من القيم التالية:
Adparaminput ، المعلمة هي معلمة الإدخال التي تم تمريرها إلى الإجراء المخزن
AdParamoutput ، المعلمة هي المعلمة الإخراج التي تم استردادها من الإجراء المخزن
Adparaminputoutput ، يمكن استخدام المعلمات كمعلمات إدخال وإخراج
AdParamreturnValue ، تحتوي هذه المعلمة على الحالة التي يتم إرجاعها بواسطة الإجراء المخزن
مقاس
طول المعلمة. بالنسبة لأنواع الطول الثابت ، مثل الأعداد الصحيحة ، يمكن تجاهل هذه القيمة
قيمة
قيمة المعلمة
بمجرد إنشاء المعلمة ، يمكن إلحاقها بمجموعة المعلمات ، على سبيل المثال:
تعيين parvalue = cmdupdate.createparameter (thepe ، advarwchar ، adparaminput ، _
12 ، عمل)
cmdupdate.parameters.append parvalue
تعيين parvalue = cmdupdate.createparameter (percent ، adcurrency ، _
adparaminput ، ، 10)
cmdupdate.parameters.append parvalue
ليست هناك حاجة لإنشاء كائن بشكل صريح لحفظ المعلمات ، فإن النوع المتغير الافتراضي يمكن أن يعمل بشكل جيد بالفعل. إذا كنت لا ترغب في إنشاء متغير ، فيمكنك أيضًا اتخاذ اختصارات ، مثل الرمز التالي:
cmdupdate.parameters.append = _
cmdupdate.createparameter (percent ، adcurrency ، adparaminput ، ، 10)
يستخدم هذا طريقة CreateParameter لإرجاع كائن المعلمة واستلامه مع طريقة إلحاق. تعمل هذه الطريقة بشكل أسرع من استخدام المتغيرات ، ولكنها تطيل خط الكود ، مما يجعله أقل قابلية للقراءة. يمكنك اختيار إحدى هذه الطرق وفقًا لهواياتك.
بعد إضافة المعلمات إلى مجموعة المعلمات ، يتم الاحتفاظ بها فيه ، لذلك لا يتم تعيين كل معلمة بالضرورة قيمة عند إنشاء المعلمة. يمكن تعيين قيمة المعلمة في أي وقت قبل تشغيل الأمر. على سبيل المثال:
cmdupdate.parameters.append = _
cmdupdate.createparameter (percent ، adcurrency ، adparaminput)
cmdupdate.parameters (percent) = 10
ذكر الفصل السابق أن هناك عدة طرق للوصول إلى القيم في مجموعة ، ومجموعة المعلمات لا تختلف. يستخدم المثال أعلاه اسم المعلمة لاسترداد المعلمات في المجموعة ، أو يمكن البحث أيضًا باستخدام أرقام الفهرس:
cmdupdate.parameters (0) = 10
يعين الرمز أعلاه المعلمة الأولى في مجموعة المعلمة (تم تعيين المعلمات من 0)
حصة: المعرفة ذات الصلة حول كائنات خطأ ASP المتقدمة لتطبيق ASP في VBScript ، هناك بيان onerrorresumenext يتسبب في أن يتجاهل مترجم البرنامج النصي أخطاء وقت التشغيل ومتابعة تنفيذ رمز البرنامج النصي. ثم يمكن للنص التحقق من قيمة خاصية err.number لتحديد ما إذا كان حدث خطأ. في حالة حدوث خطأ ، يتم إرجاع قيمة غير صفرية