عند تطوير تطبيقات الويب، من الضروري دائمًا الوصول إلى قاعدة البيانات لإكمال العمليات مثل الاستعلام عن البيانات وإدراجها وتحديثها وحذفها. نظرًا لتأثرها بمنطق التطبيق، يكون من الضروري أحيانًا دمج تعليمات تشغيل قاعدة البيانات المتعددة في وحدة عمل (معاملة). في قاعدة البيانات، تشير المعاملة إلى مجموعة من وحدات التشغيل المنطقية التي تحول البيانات من حالة إلى أخرى. لضمان اتساق البيانات في قاعدة البيانات، يجب تشغيل البيانات في مجموعات منفصلة من الوحدات المنطقية: عند اكتمالها كلها، يمكن الحفاظ على اتساق البيانات، ولكن عندما يفشل جزء من العملية في الوحدة، يمكن الحفاظ عليها بأكملها؛ سيتم تجاهل المعاملة، وسيتم إرجاع جميع العمليات من نقطة البداية فصاعدًا إلى حالة البداية.
في الواقع، كل عملية على قاعدة البيانات هي معاملات ضمنية بشكل افتراضي. تأخذ هذه المقالة برنامج تسجيل مستخدم نموذجي كمثال لتقديم ثلاث طرق لاستخدام ASP لتنفيذ معالجة المعاملات: حل يعتمد على مكونات قاعدة بيانات ASP، وحل يعتمد على آلية معالجة المعاملات داخل قاعدة البيانات، وحل يعتمد على مكونات MTS .
وظائف البرنامج
قم بإنشاء جدولين في قاعدة بيانات SQL Server: جدول USER وجدول USERDOC. يخزن جدول USER اسم المستخدم وكلمة المرور للمستخدم المسجل، ويخزن جدول USERDOC المعلومات الشخصية للمستخدم المسجل، مفهرسة حسب اسم المستخدم. فيما يلي تعريف الجداول USER وUSERDOC:
إنشاء جدول USER(userName varchar(30),userPasswd varchar(30))
إنشاء جدول USERDOC(userName varchar(30),Age int,Sex int,PhoneNumber varchar(20),Address varchar(50))
عندما يطلب المستخدم التسجيل، يقوم البرنامج النصي ASP أولاً بإدراج اسم المستخدم وكلمة المرور في جدول المستخدم، ثم في USERDOC، أدخل المعلومات الشخصية للمستخدم (العمر والجنس ورقم الاتصال وعنوان المنزل وما إلى ذلك) في الجدول. وفي الوقت نفسه، يجب أن يتأكد التطبيق أيضًا من أن كل سجل في جدول USER له سجل مطابق في جدول USERDOC.
تستخدم الطريقة الأولى كائن الاتصال في مكون ADO المضمن في ASP لتنفيذ معالجة المعاملات لعمليات قاعدة البيانات. بعض أساليب كائن الاتصال هي كما يلي:
●طريقة Connect.BeginTrans: بدء المعاملة؛
طريقة Connection.CommitTrans: إكمال/إرسال معاملة؛
●طريقة Connection.RollBackTrans: التراجع عن/التخلي عن المعاملة.
// ابدأ عملية المعاملة
<%Conn.BeginTrans%>
<% sqlText="أدخل في قيم USER(userName,userPasswd)('" %>
<% sqlText=sqlText & request("usrName") & "','"&request("usrPasswd")&"') " %>
<% conn.execute(sqlText) %>
<% إذا conn.Errors.Count>0 ثم %>
<% conn.Errors.Clear %>
// إذا فشلت عملية إدراج البيانات، فسيتم إرجاع المعاملة إلى الأمام
<% conn.RollBackTrans %>
<% Response.Redirct RegisterFail.html %>
<% نهاية إذا %>
<% sqlText="أدخل في USERDOC(اسم المستخدم،العمر،الجنس،رقم الهاتف،العنوان)"%>
<% sqlText=sqlText & "values('"& request ("usrName") & "', " & request("Age") %>
<% sqlText=sqlText & ",'" & الطلب ("رقم الهاتف") & "','" %>
<% sqlText=sqlText & request("Address") & "') " %>
// تنفيذ عبارة الإدراج الثانية في وحدة المعاملة
<% conn.execute(sqlText) %>
<% إذا conn.Errors.Count>0 ثم %>
<% conn.Errors.Clear %>
// إذا فشلت العملية، فسيتم إرجاع المعاملة إلى الأمام
<% conn.RollBackTrans %>
<% Response.Redirct RegisterFail.html %>
<% نهاية إذا %>
// إذا تم تنفيذ عملية المعاملة بأكملها بشكل صحيح، فقم بتنفيذ المعاملة
<% Conn.CommitTrans %>
// انتقل إلى صفحة معالجة نجاح التسجيل
<% Response.Redirct RegisterOk.html %>
يمكن للطريقة الثانية استخدام آلية معالجة المعاملات داخل نظام قاعدة البيانات لإكمال معالجة المعاملات لعمليات البيانات عن طريق كتابة الإجراءات المخزنة التي تحتوي على المعاملات في خادم قاعدة البيانات. وفي الوقت نفسه، باستخدام مكون ADO لاستدعاء الإجراء المخزن، يمكنك أيضًا تحديد ما إذا كان قد تم تنفيذ المعاملة بنجاح استنادًا إلى رمز الإرجاع الخاص بالإجراء المخزن.
في نظام قاعدة البيانات، كل عبارة SQL هي معاملة. ولذلك، فمن المؤكد أن كل عبارة إما أن تكتمل أو تعود إلى البداية. ومع ذلك، إذا كنت تريد أن تكون عمليات مجموعة عبارات SQL إما مكتملة بالكامل أو كلها غير صالحة، فأنت بحاجة إلى استخدام آلية معالجة المعاملات الخاصة بقاعدة البيانات لتحقيق ذلك.
الكود الرئيسي لإنشاء الإجراء المخزن في قاعدة البيانات هو كما يلي:
قم بإنشاء proc RegisterUser (@usrName varchar(30)، @usrPasswd varchar(30)،@age int، @PhoneNum varchar(20)، @Address varchar(50)) كما تبدأ
// عرض التعريف وبدء المعاملة
ابدأ النقل
أدخل في قيم USER(userName,userPasswd)(@usrName,@usrPasswd)
إذا @@خطأ<>0
يبدأ
// إذا فشلت العملية، فسيتم التراجع عن المعاملة
التراجع عن النقل
// ارجع إلى الإجراء المخزن وقم بتعيين رمز الإرجاع لفشل عملية المعاملة
العودة -1
نهاية
أدخل في USERDOC (اسم المستخدم، العمر، الجنس، رقم الهاتف، العنوان)
القيم (@Usrname،@age،@PhoneNum،@Address)
إذا @@خطأ<>0
يبدأ
// إذا فشلت العملية، فسيتم التراجع عن المعاملة
التراجع عن النقل
العودة -1
نهاية
// إذا تم تنفيذ العملية بشكل صحيح، فقم بإجراء المعاملة
ارتكاب عملية
العودة 0
نهاية
الكود الرئيسي لاستدعاء إجراء قاعدة البيانات المخزنة في البرنامج النصي ASP هو كما يلي:
<% قم بتعيين Comm=server.CreateObject
("ADODB.Command") %>
<% قم بتعيين Comm.ActiveConnection=conn %>
<% Comm.CommandType=adCmdStoredProc %>
<% Comm.CommandText="RegisterUser" %>
// إنشاء إجراء مخزن لإرجاع كائن المعلمة
<% Set RetCode=Comm.CreateParameter
("RetCode"،adInteger،adParamReturnValue) %>
// إنشاء كائن معلمة إدخال الإجراء المخزن
<% تعيين usrName=Comm.CreateParameter ("usrName"،adVarchar،adParamInput,30) %>
<% قم بتعيين usrPwd=Comm.CreateParameter
("usrPasswd"،adVarchar،adParamInput،30) %>
<% تعيين العمر=Comm.CreateParameter("age",adInteger,adParamInput) %>
<% قم بتعيين PhoneNum=Comm.CreateParameter
("PhoneNum"،adVarchar،adParamInput، 20) %>
<% تعيين العنوان=Comm.CreateParameter("Address",adVarchar,adParamInput,50) %>
<% Comm.Parameters.Append usrName %>
<% Comm.Parameters.Append usrPwd %>
<% Comm.Parameters.إلحاق العمر %>
<% Comm.Parameters.Append PhoneNum %>
<% Comm.Parameters.Append Address %>
<% Comm.Parameters("usrName")=request("usrName") %>
<% Comm.Parameters("usrPasswd")=request("usrPasswd") %>
<% Comm.Parameters("age")=request("age") %>
<% Comm.Parameters("PhoneNum")=request("PhoneNum") %>
<% Comm.Parameters("Address")=request("Address") %>
<% تنفيذ الأمر %>
<% RetValue=Cint(Comm("RetCode")) %>
// تحديد ما إذا كان التسجيل ناجحًا بناءً على رمز إرجاع الإجراء المخزن في قاعدة البيانات
<% إذا كانت قيمة إعادة القيمة< 0 ثم %>
<% Response.Redirect RegisterFail.html %>
<% آخر %>
<% Response.Redirect RegisterOk.html %>
<% نهاية إذا %>
الطريقة الثالثة: عند استخدام آلية معالجة المعاملات الخاصة بمكون MTS (خادم المعاملات Microsoft) لتنفيذ معالجة المعاملات، يجب إيلاء اهتمام خاص لحقيقة أن المعاملات ضمن هذه الآلية لا يمكن أن تمتد إلى صفحات ASP متعددة إذا كانت المعاملة تتطلب كائنات من مكونات متعددة يجب عليك دمج العمليات على هذه الكائنات في صفحة ASP.
أولاً، تحتاج إلى إضافة توجيه @TRANSACTION في أعلى الصفحة للإعلان عن صفحة ASP كصفحة معاملات.
يجب أن يكون توجيه @TRANSACTION في السطر الأول من الصفحة، وإلا سيتم إنشاء خطأ. عند انتهاء معالجة البرنامج النصي ASP في الصفحة، تنتهي المعاملة الحالية.
<%@ المعاملة=اللغة المطلوبة=
في بي سكريبت٪>
// تم تشغيل الحدث بنجاح من خلال تنفيذ المعاملة
<% Sub OnTransactionCommit() %>
<% Response.Redirect RegisterOk.html %>
<% نهاية فرعية %>
// يتم تشغيل الحدث عندما يفشل تنفيذ الأشياء
<% Sub OnTransactionAbort() %>
<% Response.Redirect RegisterFail.html %>
<% نهاية فرعية %>
<% sqlText="أدخل في قيم USER(userName,userPasswd)('" %>
<% sqlText=sqlText & request("usrName") & "','" &request("usrPasswd")&"') " %>
<% conn.execute(sqlText) %>
<% إذا conn.Errors.Count>0 ثم %>
<% conn.Errors.Clear %>
<% ObjectContext.SetAbort %>
<% نهاية إذا %>
<% sqlText="أدخل في USERDOC(اسم المستخدم،العمر،الجنس،رقم الهاتف،العنوان)"%>
<% sqlText=sqlText & "values('" & request("usrName")& "', " & request("Age") %>
<% sqlText=sqlText & ",'" & request("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Address") & "') " %>
<% conn.execute(sqlText) %>
<% إذا conn.Errors.Count>0 ثم %>
<% conn.Errors.Clear %>
<% ObjectContext.SetAbort %>
<% نهاية إذا %>
<% ObjectContext.SetComplete %>
الحل أكثر مرونة. تتميز طريقة استخدام مكونات قاعدة بيانات ASP بمزايا معينة: يمكنك استخدام مكونات قاعدة بيانات ADO لإكمال معالجة المعاملات، ويمكنك أيضًا تخصيص مكونات قاعدة البيانات الخاصة بك وفقًا للاحتياجات الفعلية (طالما أنها تلبي مكون ASP). مواصفات الكتابة) يمكن). إذا كنت تأخذ في الاعتبار موثوقية معالجة معاملات قاعدة البيانات، فمن الأفضل استخدام الإجراء المخزن لمعالجة المعاملات داخل قاعدة البيانات. بهذه الطريقة، يمكن استخدام آلية معاملات قاعدة البيانات مباشرة لإكمال معالجة المعاملات المنطقية للتطبيق، وهي آمنة وموثوقة، وتقلل من تفاعل البيانات بين خادم الويب وخادم قاعدة البيانات. وهذا مهم بشكل خاص لأنظمة قواعد البيانات الموزعة. تتمثل ميزة طريقة معالجة المعاملات باستخدام مكونات MTS في أن خادم MTS يتحكم بشكل مباشر ويدير إكمال عمليات المكونات (المكونات المسجلة في MTS) والتراجع عنها، وله مساحة توسعة جيدة وآفاق التطبيق، ويمكنه إطلاق العنان للتقنية مزايا MTS تعزيز أداء التسامح مع الأخطاء لتطبيقات الشبكة وتحسين الأداء الديناميكي لخوادم ويب IIS.