محاضرة ASP 9: ASP وقاعدة البيانات (4)
الكاتب:Eve Cole
وقت التحديث:2009-05-30 19:54:56
في هذه المحاضرة، سنقدم بشكل أساسي كيفية استخدام المعلمات والإجراءات المخزنة.
1. استخدم كائن الأمر وكائن المعلمة لنقل المعلمات. ستستخدم هذه المحاضرة بشكل أساسي قاعدة بيانات Microsoft SQL Server7.0 أولاً، قم بإنشاء ملف اتصال AdoSQL7.asp للنسخ الاحتياطي مستقبل.
<% 'AdoSQL7.asp
الخيار صريح
الاستجابة.انتهاء الصلاحية = 0
'الجزء الأول: إنشاء اتصال
ديم سي إن إن، ستركن
تعيين Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "الموفر=sqloledb؛ معرف المستخدم=sa؛ كلمة المرور=؛ الكتالوج الأولي=الناشرون؛ مصدر البيانات=ICBCZJP"
Cnn.افتح StrCnn
%>
ملاحظة: عند استخدامه بنفسك، قم بتعيين مصدر البيانات على اسم الجهاز الخاص بخادم قاعدة البيانات الخاصة بك.
بالإضافة إلى ذلك، عند استخدام قاعدة بيانات Access في الماضي، كان من السهل جدًا استخدام Microsoft Access97 لعرض الحقول والبيانات، ومع ذلك، عند استخدام قاعدة بيانات SQL Server، خاصة عند تصحيح أخطاء البرامج النصية لـ ASP ليس على خادم قاعدة البيانات ولكن على جهاز آخر. ضروري لعرض الحقول والبيانات. يجب تثبيت البيانات بشكل منفصل. إليك أداة مناسبة لك: Msqry32.exe (Microsoft Query). تم تثبيت هذا الملف مع Office97 ويوجد بشكل عام في الدليل "Microsoft OfficeOffice".
مثال wuf70.asp:
<%@ LANGUAGE="VBSCRIPT" %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf70.asp
خافت cmdTest، prmTest، rsTest
"إنشاء كائن أمر."
تعيين cmdTest = Server.CreateObject("ADODB.Command")
'يمكن لكائنات مجموعة السجلات والأوامر الاتصال بكائنات الاتصال من خلال خاصية ActiveConnection.
cmdTest.ActiveConnection = Cnn
'أمر SQL - يحتوي على معلمتين، هل تستخدمه؟ يعبر
cmdTest.CommandText = "تحديث مجموعة المهام job_desc = ؟ أين job_id = ؟"
'اضبط نوع الأمر ليكون عبارة SQL
cmdTest.CommandType = adCmdText
تحدد السمة المعدة ما إذا كان سيتم ترجمة أمر SQL أولاً أم لا، كما أن تعيينه على True يمكن أن يؤدي إلى تسريع عملية التنفيذ.
cmdTest.Prepared = صحيح
"إنشاء كائن معلمة."
تعيين prmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"network")
'إلحاق البيانات بمجموعة بيانات المعلمات
cmdTest.Parameters.Append prmTest
تعيين prmTest = cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")
cmdTest.Parameters.Append prmTest
'تنفيذ التعديلات - لا حاجة لإرجاع النتائج، ما عليك سوى استخدام cmdTest.Execute
cmdTest.Execute
"إعادة ضبط المعلمات والتشغيل - يمكنك تعديل جزء آخر من البيانات."
cmdTest.Parameters("job_id") = "1"
cmdTest.Parameters("job_desc") = "اختبار"
cmdTest.Execute
'إعادة تعيين المعلمات للتشغيل
cmdTest("job_id") = "14"
cmdTest("job_desc") = "المالية"
cmdTest.Execute
تعيين rsTest = Cnn.Execute("اختر job_id,job_desc من الوظائف")
بينما ليس rsTest.EOF
الاستجابة.اكتب rsTest(0) وrsTest(1) و"<br>"
rsTest.MoveNext
ويند
Cnn.إغلاق: تعيين prmTest = لا شيء
تعيين cmdTest = لا شيء: تعيين Cnn = لا شيء
%>
تحليل:
1. يتم استخدام أسلوب CreateParameter لكائن Command لإنشاء كائنات معلمات لأوامر SQL أو الإجراءات المخزنة. هناك خمس معلمات في المجمل (جميع المعلمات الخمس اختيارية):
المعلمة الأولى: اسم كائن المعلمة؛
المعلمة الثانية: نوع بيانات كائن المعلمة، هناك أنواع كثيرة جدًا، يرجى الرجوع إلى مساعدة ADO، هنا adVarChar (قيمة السلسلة)، adSmallInt (عدد صحيح موقّع 2 بايت)؛
المعلمة الثالثة: نوع المعلمة. يمكن أن يكون: adParamInput (يشير إلى معلمة إدخال)، وadParamOutput (يشير إلى معلمة إخراج)، وadParamReturnValue (يشير إلى قيمة الإرجاع)، وadParamUnknown (يشير إلى أنه لا يمكن تحديد نوع المعلمة)، وadParamInputOutput (يشير إلى معلمة إدخال/إخراج)؛
المعلمة الرابعة: طول بيانات المعلمة ومن الأفضل تحديدها على أنها مساوية لطول الحقل المقابل في قاعدة البيانات لتجنب الأخطاء عند استخدامها، خاصة عندما يكون نوع البيانات VarChar إذا كان عددًا صحيحًا أو نوع التاريخ، لا تحتاج إلى تقديم هذه القيمة؛
المعلمة الخامسة: القيمة الأولية لإعداد المعلمة.
2. يضيف الأسلوب cmdTest.Parameters.Append كائن معلمة إلى مجموعة بيانات المعلمات، ومن هذا المثال، يمكنك أيضًا معرفة كيفية استخدام معلمات متعددة.
3. كما ترون من هذا المثال، ما عليك سوى إعادة تعيين معلمات الإدخال لتعديل البيانات الأخرى، وهي فكرة مريحة للغاية أيضًا.
4. لإعادة تعيين المعلمات، يمكنك استخدام cmdTest.Parameters أو حذفه كـ cmdTest("job_id").
2. استخدام الإجراءات المخزنة في ASP ما هو الإجراء المخزن (الإجراء المخزن موجود في خادم قاعدة البيانات وهو عبارة عن مجموعة من عبارات SQL التي يمكن أن تحتوي على عبارات SQL واحدة أو أكثر). محتوى هذه المحاضرة يقدم بشكل أساسي أمثلة لتوضيح كيفية استدعاء الإجراءات المخزنة في ASP.
تعد فوائد استخدام الإجراءات المخزنة رائعة. تعتبر الإجراءات المخزنة أكثر كفاءة من تشغيل أوامر SQL في برامج ASP النصية؛ حيث يمكنها تحسين الأداء العام وتقليل حمل الشبكة (تقليل التفاعل بين خادم الشبكة وخادم البيانات)؛ وتعزيز مرونة التعليمات البرمجية، وما إلى ذلك.
(1) استخدام معلمات الإدخال في الإجراء المخزن الإجراء المخزن المستخدم في هذا المثال هو "byroyalty" الذي يأتي مع SQL Server 7.0. إن عبارة SQL فيه بسيطة جدًا وهي ليست أكثر من مجرد إجراء إنشاء إضافي ومدخل المعلمة هي @percentage .
إنشاء إجراء بواسطةroyalty @percentage int
مثل
حدد au_id من titleauthor
حيث titleauthor.royaltyper = @percentage
مثال wuf71.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf71.asp
خافت cmdTest، prmTest، rsTest
تعيين cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.CommandText = "byroyalty" 'اسم الإجراء المخزن
'قم بتعيين نوع الأمر كإجراء مخزن
cmdTest.CommandType = adCmdStoredProc
"إنشاء كائن معلمة."
تعيين prmTest = Server.CreateObject("ADODB.Parameter")
'تتوافق سمة النوع مع المعلمة الثانية في wuf70.asp
prmTest.Type = adInteger '4 بايت عدد صحيح موقّع' تتوافق سمة الاتجاه مع المعلمة الثالثة في wuf70.asp
prmTest.Direction = adParamInput
'تتوافق سمة القيمة مع المعلمة الخامسة في wuf70.asp
قيمة اختبار prm = 30
cmdTest.Parameters.Append prmTest
تعيين cmdTest.ActiveConnection = Cnn
'تحتاج إلى إرجاع مجموعة سجلات، لذا استخدم Set rsTest = cmdTest.Execute
قم بتعيين rsTest = cmdTest.Execute
بينما ليس rsTest.EOF
الاستجابة.اكتب rsTest(0) و"<br>"
rsTest.MoveNext
ويند
سي إن إن إغلاق
تعيين rsTest = لا شيء: تعيين prmTest = لا شيء
تعيين cmdTest = لا شيء: تعيين Cnn = لا شيء
%>
يمكن للخاصية CommandText تحديد أمر SQL أو إجراء مخزن أو اسم جدول.
في هذا المثال، يختلف إنشاء كائن معلمة قليلاً عن wuf70.asp. في الواقع، إذا نظرت بعناية، ستجد أن المعنى مشابه. هناك سمتان غير مستخدمتين في هذا المثال: prmTest.Name، وprmTest.Size، بالإضافة إلى النوع، والاتجاه. والقيمة، المقابلة للمعلمات الخمس في wuf70.asp.
(2) عند استخدام معلمات الإخراج للحصول على سجل أو حساب قيمة من جدول قاعدة البيانات، فإنك تحتاج إلى استخدام إجراء مخزن يقوم بإرجاع معلمات الإخراج. على سبيل المثال، قم أولاً بإنشاء إجراء مخزن جديد في مكتبة النشرات الخاصة بـ SQL Server. يحتاج هذا الإجراء المخزن إلى إدخال تاريخين ثم إخراج القيمة القصوى.
إنشاء إجراء للتوظيف
(
@job_lvl tinyint الإخراج،
@hire_date1 التاريخ والوقت،
@hire_date2 التاريخ
)
مثل
حدد @job_lvl = MAX(job_lvl) من الموظف
حيث Hire_date >= @hire_date1 و Hire_date <= @hire_date2
هناك عدة طرق لإنشاء الإجراءات المخزنة:
1. استخدم Enterprise Manager الخاص بـ Microsoft SQL Server بعد فتحه، افتحه في دليل الشجرة على اليسار: Console Root - Microsoft SQL Servers - SQL Server Group - ICBCZJP (Windows NT) - قواعد البيانات - Pubs - الإجراء المخزن - الإجراء المخزن الجديد. أدخل الإجراء المخزن وأخيرًا، يمكن أيضًا إجراء الكشف النحوي عليه.
2. باستخدام محلل الاستعلام الخاص بـ Microsoft SQL Server، اتصل أولاً بخادم قاعدة البيانات وحدد قاعدة بيانات Pubs (الناشرون). أدخل الإجراء المخزن أعلاه وانقر فوق تنفيذ الاستعلام (أو اضغط على F5)؛
3. باستخدام VB6.0، بعد فتح القائمة "عرض"/"نافذة عرض البيانات"، انقر بزر الماوس الأيمن على "رابط البيانات"/"رابط البيانات الجديد"؛
4. استخدم البرنامج النصي ASP لإنشاء إجراء مخزن، على سبيل المثال wuf75.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf75.asp
DimStrSQL
'ملاحظة: & Chr(10) & Chr(13) غير ضروريين على الإطلاق، وذلك بشكل أساسي للمظهر الجميل.
StrSQL="إنشاء الإجراء OUTemploy ( @job_lvl tinyint OUTPUT, " & Chr(10) & Chr(13) &_
"@hire_date1 datetime, @hire_date2 datetime) AS " & Chr(10) & Chr(13) &_
"اختر @job_lvl = MAX(job_lvl) من الموظف" &_
"حيث تاريخ التوظيف >= @hire_date1 و تاريخ التوظيف <= @hire_date2"
Cnn. تنفيذ StrSQL
Response.Write "إنشاء الإجراء المخزن بنجاح"
Cnn.إغلاق: تعيين Cnn = لا شيء
%>
بعد إنشاء الإجراء المخزن، بالإضافة إلى استخدام القائمة، يمكنك أيضًا استخدام عبارة SQL "إسقاط الإجراء OUTemploy" لحذفه.
مثال wuf72.asp – إرسال معلمات الإدخال المطلوبة إلى الإجراء المخزن والحصول على نتائج الإخراج.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf72.asp
خافت cmdTest، prmTest
تعيين cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "OUTemploy" 'اسم الإجراء المخزن
cmdTest.CommandType = adCmdStoredProc
"إنشاء كائن معلمة."
تعيين prmTest = cmdTest.CreateParameter("job_lvl"،adTinyInt،adParamOutput)
cmdTest.Parameters.Append prmTest
'adTinyInt - عدد صحيح بتوقيع 1 بايت
'adDbDate - قيمة التاريخ (yyyymmdd)
تعيين prmTest = cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")
cmdTest.Parameters.Append prmTest
تعيين prmTest = cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")
cmdTest.Parameters.Append prmTest
cmdTest.Execute
"التعبيرات الثلاثة التالية لها نفس المعنى
Response.Write cmdtest("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl").القيمة
سي إن إن إغلاق
تعيين prmTest = لا شيء
تعيين cmdTest = لا شيء: تعيين Cnn = لا شيء
%>
(3) استخدم معلمة رمز الإرجاع لاستخدام عبارة Return لإرجاع رموز إرجاع مختلفة من الإجراء المخزن، على سبيل المثال، يحصل الإجراء المخزن التالي أولاً على مجموعة سجلات، ثم يقوم بإرجاع 1 إذا كان هناك موظف يُدعى Margaret، وإلا فسيتم إرجاعه. يعود 0.
إنشاء إجراء إرجاع التوظيف
مثل
حدد emp_id، fname من الموظف
إذا كان موجودًا (اختر fname من الموظف حيث fname='Margaret')
العودة(1)
آخر
العودة(0)
مثال wuf73.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf73.asp
خافت cmdTest، prmTest، rsTest
تعيين cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "Returnemploy" 'اسم الإجراء المخزن
cmdTest.CommandType = adCmdStoredProc
تعيين prmTest = cmdTest.CreateParameter("ReturnValue"،adInteger،adParamReturnValue)
cmdTest.Parameters.Append prmTest
تعيين rsTest = cmdTest.Execute()
بينما ليس rsTest.EOF
Response.Write rsTest(0) & " ][ " & rsTest(1) & "<br>"
rsTest.MoveNext
ويند
rsTest.Close: اضبط rsTest = لا شيء
'قبل إرجاع cmdtest("ReturnValue")، يجب إغلاق rsTest أولاً، وإلا ستكون النتيجة خاطئة
إذا cmdtest("ReturnValue") = 1 إذن
الرد.اكتب "هناك هذا الموظف"
آخر
الرد.اكتب "لا يوجد مثل هذا الموظف"
نهاية إذا
سي إن إن إغلاق
تعيين prmTest = لا شيء
تعيين cmdTest = لا شيء: تعيين Cnn = لا شيء
%>
3. كيفية معالجة البيانات الضخمة تشير "البيانات الضخمة" هنا بشكل أساسي إلى حقول النص (نص كبير) والصورة (الصورة)، والتي لا يمكن الحصول على بياناتها بشكل صحيح باستخدام الطريقة الموضحة أعلاه. يجب عليك أولاً استخدام Size = rsTest(0).ActualSize للحصول على الطول الفعلي لقيمة الحقل، ثم استخدام rsTest(0).GetChunk(Size) للحصول على البيانات. في الاستخدام الفعلي، نظرًا لأن هذه الحقول كبيرة نسبيًا، من أجل حفظ موارد الخادم واستخدامها بشكل عقلاني، يتم اعتماد القراءة المجزأة بشكل عام. مثال wuf74.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf74.asp
خافت StrSQL، rsTest
'pr_info هو حقل نصي
StrSQL = "اختر pr_info,pub_id من pub_info"
تعيين rsTest = Cnn.Execute(StrSQL)
خافت BasicSize، BeginSize، LText
افعل بينما لا rsTest.EOF
الاستجابة.اكتب rsTest(1) و"<br>"
'اقرأ 1024 بايت في كل مرة
الحجم الأساسي = 1024
حجم البداية = 0
بينما BeginSize < rsTest(0).ActualSize
LText = rsTest(0).GetChunk(BasicSize)
BeginSize = BeginSize + BasicSize
'الإخراج إلى شريحة العميل حسب القطعة
الاستجابة.اكتب LText
ويند
الاستجابة.اكتب "<br><br>"
rsTest.MoveNext
حلقة
سي إن إن إغلاق
تعيين rsTest = لا شيء: تعيين Cnn = لا شيء
%>
في هذا المثال، تتم قراءة 1024 بايت كحد أقصى في كل مرة، وتتم قراءة البيانات عدة مرات. على العكس من ذلك، إذا قمت بكتابة بيانات كبيرة إلى قاعدة البيانات، فإن الطريقة مشابهة لما سبق، ولكن بدلاً من استخدام طريقة GetChunk، يمكنك استخدام طريقة AppendChunk:
rsTest(0).AppendChunkLtext
ملاحظة: أخيرًا، سأقدم خدعة صغيرة حول قاعدة بيانات SQL Server إذا واجهت هذا الموقف: يتم عرض البيانات الصينية في قاعدة البيانات كأحرف مشوهة، من فضلك لا داعي للذعر. ما عليك سوى الانتقال إلى موقعي لتنزيل sqlsrv32.dll والكتابة فوق الملف الذي يحمل نفس الاسم ضمن "C:WindowsSystem". مصدر المشكلة هو برنامج تشغيل SQL Server، والذي يحدث عادةً في Windows 98 Second Edition (رقم إصدار برنامج تشغيل SQL Server هو 3.70.06.23) أو Windows 2000 أو عند تثبيت MDAC2.5 (رقم الإصدار 3.70.08.20) .