بالنسبة لمستخدمي ASP، كلما كانت عملية قاعدة البيانات أبسط، زاد الوقت المتاح لهم للنظر في المنطق ورمز التطبيق، وستكون الكفاءة أعلى.
أنا هنا اليوم لتزويدك بفكرة حول تشغيل قاعدة البيانات، حيث يتم إكمال هذه الرموز وتعديلها باستمرار في تطبيق ASP طويل الأمد، وقد أكملت أيضًا العديد من المشاريع معها مشكلة في استخدامه مباشرة. بالطبع قدراتي محدودة، لذا آمل أن يتمكن الجميع من مناقشة الأمر معًا.
ملاحظة: الرموز الموجودة في هذا المنشور هي جميع إصدارات VBScript. بالإضافة إلى ذلك، من الأفضل أن يكون لديك بالفعل أساس معين في الكتابة اليدوية لـ ASP.
أولاً، اسمحوا لي أن أقدم بإيجاز بعض ميزات صفي:
يمكن تشغيل قواعد بيانات متعددة من أنواع مختلفة في وقت واحد.
ليست هناك حاجة للنظر في الاختلاف في أنواع البيانات على الإطلاق، وليست هناك حاجة للتفكير فيما إذا كنت تريد إضافة علامات اقتباس مفردة إلى حقول الأحرف.
الاستدعاء بسيط للغاية، وتتطلب العملية الرئيسية في قاعدة البيانات عمومًا سطرًا واحدًا فقط من التعليمات البرمجية.
دعم التراجع عن المعاملات mssql.
يمكن إنشاء عبارات SQL وإخراجها تلقائيًا لتسهيل تصحيح الأخطاء.
كيفية الاستخدام:
1. قم بتعديل السطر الأول في ملف clsDbctrl.asp إلى موقع قاعدة البيانات الخاصة بك (راجع وصف وظيفة CreatConn أدناه للتعرف على طريقة التعديل). إذا كنت بحاجة إلى الاتصال بقواعد بيانات متعددة، فيمكنك إضافتها بنفسك بنفس التنسيق.
2. قم بتضمين ملف asp هذا في ملف asp الجديد. يحب:
<!--#include file="Inc/clsDbctrl.asp" --> أو:
<!--#include virtual="/Inc/clsDbctrl.asp"-->
3. استخدم الكود التالي لتطبيق هذا الفصل:
اتصال قاعدة البيانات:
<%
OpenConn() "فتح اتصال قاعدة البيانات".
Dim db: Set db = New DbCtrl 'إنشاء كائن
"الرمز الخاص بك هنا..."
Co(db) : CloseConn() 'حرر الكائن وأغلق اتصال قاعدة البيانات
%>
أو (واحد أو أكثر من اتصالات قاعدة البيانات):
<%
Dim db1: تعيين db1 = DbCtrl جديد: db1.dbConn = Oc(a)
خافت db2: تعيين db2 = DbCtrl جديد: db2.dbConn = Oc(b)
"الرمز الخاص بك هنا..."
المشارك (db1) : المشارك (db2)
%>
4. للحصول على أمثلة عمليات محددة، يرجى الرجوع إلى أمثلة التعليمات البرمجية في كل وصف وظيفة.
نظرة عامة على الأساليب والخصائص (الاستخدام التفصيلي والأمثلة أدناه):
يقتبس:
يقوم CreateConn بإنشاء سلسلة اتصال قاعدة البيانات
يقوم Oct بإنشاء اتصال بقاعدة البيانات
كائن الافراج المشترك
يفتح OpenConn اتصال قاعدة البيانات الافتراضية
يقوم CloseConn بإغلاق اتصال قاعدة البيانات الافتراضية
الخاصية dbCtrl.dbConn، تحصل على اتصال قاعدة البيانات المراد تشغيله، والقيمة الافتراضية هي Conn
الخاصية dbCtrl.dbErr، للقراءة فقط، تقوم بإخراج رسالة الخطأ التي تم التقاطها
خاصية dbCtrl.Version، للقراءة فقط، معلومات إصدار البرنامج
dbCtrl.AutoId، للحصول تلقائيًا على الرقم التسلسلي الفريد
طريقة dbCtrl.GetRecord للحصول على مجموعة سجلات تفي بالشروط
طريقة dbCtrl.GetRecordBySql، تحصل على مجموعة السجلات بناءً على عبارة SQL
تعتمد طريقة dbCtrl.GetRecordDetail على البيانات التفصيلية للسجل المحدد
أسلوب dbCtrl.AddRecord، إضافة سجل جديد
يقوم أسلوب dbCtrl.UpdateRecord بتحديث السجلات وفقًا للشروط المحددة
طريقة dbCtrl.DeleteRecord، حذف السجلات التي تفي بالشروط
يحصل الأسلوب dbCtrl.ReadTable على محتويات الحقول الأخرى في سجل بناءً على شروط محددة.
طريقة dbCtrl.C، أغلق كائن مجموعة السجلات
dbCtrl.wGetRecord،
dbCtrl.wAddRecord،
dbCtrl.wUpdateRecord،
dbCtrl.wDeleteRecord هذه الطرق الأربع هي عبارات SQL التي تحصل على العمليات المقابلة (مسبوقة بـ w)
اتفاقية المعلمة:
نظرًا لأن ASP لا يحتوي على كائن وسيطات ولا يمكنه استخدام المعلمات الديناميكية، في كود هذه الفئة، يتم استخدام Array لتحقيق هذا التأثير. يمكن لبعض المعلمات في هذه الفئة استخدام المصفوفات (كما هو مذكور في وصف المعلمة)، ولكن يجب اتباع التنسيق التالي عند استخدام المصفوفات:
صفيف ("Field1:Value1"، "Field2:True"، "Field3:100")
نعم، إنه يشبه إلى حد ما تنسيق json إذا كانت هناك متغيرات، فهو كالتالي:
صفيف ("Field1:" & Value1، "Field2:" & Value2، "Field3:" & Value3)
يمكن القول أن كل المحتوى المتعلق بحقول قاعدة البيانات في هذه الفئة تقريبًا يمكنه استخدام تنسيق المصفوفة أعلاه لتعيين الشروط أو الحصول على المحتوى. أكبر ميزة هنا هي أنك لا تحتاج إلى مراعاة نوع الحقل عند استخدامه، ما عليك سوى اتباع الحقل بنقطتين ثم القيمة المقابلة. إذا كنت تكتب برامج ASP يدويًا، فستشعر قريبًا بسحر استخدام هذه الطريقة، بالإضافة إلى نوع البيانات، كما أنها مريحة جدًا لإضافة الشروط وحذفها في أي وقت. لا يهم إذا كنت لا تفهم كيفية استخدامه بعد، فهناك العديد من الأمثلة أدناه لتوضيح هذه المشكلة.
في الواقع، ليس من الصعب تغليف عمليات قاعدة البيانات الخاصة بـ ASP، وأعتقد أنك قد قمت بإنشاء تعليمات برمجية مماثلة من قبل أو استعرت تعليمات برمجية مغلفة لأشخاص آخرين. ولكن كما يعلم الجميع، بمجرد حدوث خطأ باستخدام التعليمات البرمجية المغلفة، يصبح تصحيح الأخطاء أمرًا مزعجًا. بشكل عام، كلما كانت العملية المغلفة أبسط، أصبح تصحيح الأخطاء أكثر تعقيدًا. عندما كتبت هذه الرموز، بذلت قصارى جهدي للنظر في كيفية استكشاف الأخطاء وإصلاحها في حالة حدوث خطأ ما، أثناء تبسيط التعليمات البرمجية للمستخدمين لتشغيل قاعدة البيانات قدر الإمكان، يمكنني إخراج عبارات SQL في أي وقت لاستكشاف الأخطاء وإصلاحها.
أخيرًا، تجدر الإشارة إلى أن عمليات قاعدة بيانات ASP المتضمنة في هذه المقالة ليست مناسبة للبيانات الكبيرة، كما تعلم، من الأفضل استخدام الإجراءات المخزنة لتشغيل البيانات الكبيرة مغلفة أيضا. هناك أيضًا مشكلة تتعلق بالكفاءة، إذا كنت ترغب في تحقيق كفاءة عالية، فلا يزال يتعين عليك التفكير في COM+ وما إلى ذلك عند استخدام ASP. مرة أخرى، هذه الفئة مناسبة لمشاريع ASP الصغيرة والمتوسطة.
حسنًا، إليك تعليمات الاستخدام التفصيلية:
واحد. اتصال قاعدة البيانات
مع الأخذ في الاعتبار عادات الاستخدام لدى معظم الأشخاص، يتم استخدام عملية عامة للاتصال بقاعدة البيانات، لذلك يحتاج الجميع إلى تعديلها في التعليمات البرمجية إذا قمت بالفعل بإنشاء اتصال بقاعدة البيانات، فما عليك سوى التعليق على هذه السطور. يحتوي الكود على أربع طرق مدمجة للاتصال بقاعدة البيانات: MSSql، وAccess، وMySQL، وOracle. وبالطبع، يمكنك أيضًا إضافتها أو حذفها في الكود المصدري. تعديل المثال:
Dim a: a = CreatConn(0, "TestData"، "localhost"، "اسم المستخدم"، "userpassword")
Dim b : b = CreatConn(1, "Data/%TestDb%.mdb", ""، ""، "")
للتوضيح، يمكن أن تكون المعلمة الأولى عبارة عن سلسلة. إذا كنت تستخدم Access، فيمكنك إدخال المسار النسبي والمسار المطلق في المعلمة الثانية. وإذا كان لديك كلمة مرور، فيمكنك أيضًا إدخالها في المعلمة الخامسة، مثل:
Dim c : c = CreatConn("ACCESS"، "E:/MyWeb/Data/%TestDB%.mdb"، ""، ""، "mdbpassword")
الوظائف ذات الصلة:
النموذج الأولي: CreateConn(dbType, strDB, strServer, strUid, strPwd)
الوظيفة: إنشاء سلسلة اتصال بقاعدة البيانات
قيمة الإرجاع: سلسلة
المعلمة:
dbType: نوع قاعدة بيانات اتصال عدد صحيح أو سلسلة
(0 أو "MSSQL") - خادم Microsoft SQL
(1 أو "الوصول") - Microsoft Office Access
(2 أو "MYSQL") - خادم MySQL
(3 أو "ORACLE") - خادم أوراكل
strDB: اسم قاعدة بيانات السلسلة أو عنوان قاعدة البيانات (يمكن أن يستخدم الوصول مسارات مطلقة أو نسبية)
strServer: عنوان خادم قاعدة بيانات السلسلة، يرجى تركه فارغًا للوصول.
strUid: اسم مستخدم قاعدة بيانات السلسلة، يرجى تركه فارغًا للوصول.
strPwd: كلمة مرور قاعدة بيانات السلسلة
النموذج الأولي: أوك (كونستر)
الوظيفة: فتح اتصال قاعدة البيانات
قيمة الإرجاع: كائن اتصال قاعدة بيانات الكائن
المعلمة:
connStr: سلسلة اتصال قاعدة بيانات السلسلة، التي تم إنشاؤها بواسطة وظيفة CreateConn
النموذج الأولي: Co(obj)
الوظيفة: كائن قريب
المعلمة:
obj: Object اسم الكائن المراد إغلاقه
النموذج الأولي: OpenConn
الوظيفة: فتح اتصال قاعدة البيانات الافتراضية وإنشاء كائن اتصال يسمى Conn.
المعلمات: لا يوجد
النموذج الأولي: كلوسكون
الوظيفة: إغلاق كائن اتصال قاعدة البيانات الافتراضي المسمى Conn
المعلمات: لا يوجد
2. عمليات قاعدة البيانات
فيما يلي وصف وظيفة فئة تشغيل قاعدة البيانات هذه، يرجى الاطلاع على أمثلة التطبيق.
النموذج الأولي: dbCtrl.dbConn(objConn)
الوظيفة: الحصول على كائن اتصال قاعدة البيانات
المعلمة:
objConn: Object كائن اتصال قاعدة البيانات الذي تم إنشاؤه
مثال:
Dim db : Set db = New DbCtrl
db.dbConn = Oc(CreatConn(1"،E:/WebSite/MySite/Data/%TestDb%.mdb"،"،"،"،"))
شارك (ديسيبل)
الوصف: هذه السمة اختيارية إذا لم يتم تحديد هذه السمة، فإن اتصال البيانات الافتراضي هو كائن اتصال قاعدة البيانات المسمى Conn على الصفحة.
النموذج الأولي: dbCtrl.AutoID(TableName)
الوظيفة: الحصول تلقائيًا على رقم تسلسلي فريد (ترقيم تلقائي)
قيمة الإرجاع: عدد صحيح
المعلمة:
TableName: String اسم جدول البيانات الذي يجب الحصول على رقمه التسلسلي الفريد
مثال:
معرف جديد خافت
newId = db.AutoId("TestTable")
الاستجابة. الكتابة (معرف جديد)
النموذج الأولي: dbCtrl.GetRecord(TableName,FieldsList,Condition,OrderField,ShowN)
الوظيفة: الحصول على مجموعة السجلات المطابقة للشروط
قيمة الإرجاع: كائن مجموعة سجل الكائن
المعلمة:
TableName: اسم جدول السلسلة
قائمة الحقول: أسماء حقول السلسلة، مفصولة بفواصل، اتركها فارغة لعرض كافة الحقول
الشرط: شرط استعلام سلسلة أو صفيف، إذا كان مصفوفة، فيجب أن يتبع اصطلاح المعلمة السابق.
حقل الطلب: طريقة فرز السلسلة
ShowN: يحصل عدد صحيح على عدد السجلات، أي ما يعادل تحديد Top N في SQL
مثال:
خافتات
تعيين rs = db.GetRecord("TestTable"،"fId،fName،fAge"،"fSex='Male' And IsActive = 1"،"fName Asc"، 0)
بينما لا rs.eof
Response.Write ("الاسم هو:" & rs(1) & "العمر هو:" & rs(2) & "<br />")
rs.movenext()
ويند
ديسيبل.C (RS)
في المثال أعلاه، تحديد الشروط في تنسيق المصفوفة التالي يعادل:
تعيين rs = db.wGetRecord("TestTable"،"fId،fName،fAge"، Array("fSex:Male"،"IsActive:1")، "fName Asc"، 0)
بالإضافة إلى ذلك، يمكنك استخدام العبارة التالية لعرض عبارة SQL التي تم إنشاؤها بواسطة هذه الوظيفة:
Response.Write(db.wGetRecord("TestTable"،"fId,fName,fAge"، Array("fSex:Male"،"IsActive:1")، "fName Asc"، 0))
كما ترون، فقط أضف w قبل الوظيفة الأصلية.
النموذج الأولي: dbCtrl.GetRecordBySQL(strSelect)
الوظيفة: الحصول على مجموعة السجلات بناءً على عبارة SQL
قيمة الإرجاع: كائن مجموعة سجل الكائن
المعلمة:
strSelect: عبارة سلسلة SQL المستخدمة لإنشاء مجموعة السجلات
مثال:
خافتات
Set rs = db.GetRecordBySQL("اختر a.Id، a.LastName، b.Group من المستخدم a InnerJoin يغادر b On a.GroupId = b.GroupId")
"الرمز الخاص بك هنا..."
ديسيبل.C (RS)
النموذج الأولي: dbCtrl.GetRecordDetail(TableName, Condition)
الوظيفة: بناءً على بيانات تفصيلية لسجل محدد
قيمة الإرجاع: كائن مجموعة سجل الكائن
المعلمة:
TableName: اسم جدول السلسلة
الشرط: شرط استعلام سلسلة أو صفيف، إذا كان مصفوفة، فيجب أن يتبع اصطلاح المعلمة السابق.
مثال:
خافت روبية، معرف
المعرف = Request.QueryString("id")
تعيين rs = db.GetRecordDetail("TestTable"، "Id =" & id)
"الرمز الخاص بك هنا ..."
ديسيبل.C (RS)
الوصف: كما ترون بالفعل، يُستخدم هذا بشكل شائع لفتح صفحة تفصيلية (مثل صفحة محتوى الأخبار)
النموذج الأولي: dbCtrl.AddRecord(TableName, ValueList)
الوظيفة: إضافة سجل جديد
القيمة المرجعة: رقم معرف السجل الجديد (نجاح) أو 0 (فشل)
المعلمة:
TableName: اسم جدول السلسلة
ValueList: حقول الصفيف والقيم المدرجة في الجدول يمكن أن تكون صفائف فقط ويجب أن تتبع اصطلاحات المعلمات السابقة
مثال:
خافت fName، fSex، fWorkYear، fBirth
fName = "وانغ إرتان"
fSex = "ذكر"
سنة العمل = 12
fBirth = Cdate("23/10/1981")
نتيجة قاتمة
result = db.AddRecord("TestTable",Array("Name:"&fName, "Sex:"&fSex, "WorkYear:"&fWorkYear, "Birthday:"&fBirth, "IsActive:True"))
إذا كانت النتيجة<>0 ثم
Response.Write("تم إضافة السجل بنجاح! معرف الترقيم التلقائي لهذا السجل هو "&النتيجة)"
نهاية إذا
كما ترى، لا تحتاج حقًا إلى التفكير في نوع الحقل.
إذا كنت تريد رؤية الحقول والقيم الموجودة في الكود بشكل أكثر وضوحًا، فيمكنك أيضًا كتابتها بهذه الطريقة، لكن ذلك يعتمد على تفضيلاتك:
النتيجة = db.AddRecord("TestTable"،Array("Name:" & fName,_
"الجنس:" وfSex،_
""سنة العمل:"" و"سنة العمل"،_
"عيد ميلاد:" وعيد ميلاد، _
"نشط: صحيح"))
بالإضافة إلى ذلك، يمكنك استخدام العبارة التالية لعرض عبارة SQL التي تم إنشاؤها بواسطة هذه الوظيفة:
Response.Write(db.wAddRecord("TestTable",Array("Name:"&fName, "Sex:"&fSex, "WorkYear:"&fWorkYear, "Birthday:"&fBirth, "IsActive:True")))
ملاحظة: تستخدم قيمة المعرف التي تم إرجاعها طريقة غبية نسبيًا، ولا تضمن الدقة عندما تكون كمية البيانات المتزامنة كبيرة.
النموذج الأولي: dbCtrl.UpdateRecord(TableName, Condition, ValueList)
الوظيفة: تحديث السجلات بناءً على الشروط المحددة
قيمة الإرجاع: 1 (نجاح) أو 0 (فشل)
المعلمة:
TableName: اسم جدول السلسلة
الحالة: شرط تحديث السلسلة أو المصفوفة، إذا كانت مصفوفة، فيجب أن تتبع اتفاقية المعلمة السابقة
ValueList: الحقول والقيم المحدثة لسلسلة أو صفيف، إذا كانت مصفوفة، فيجب أن تتبع اصطلاح المعلمة السابق.
مثال:
خافت fName، fWorkYear
fName = "وانغ سان تان"
سنة العمل = 10
نتيجة قاتمة
result = db.UpdateRecord("TestTable", "UId = 1308", Array("Name:"&fName, "WorkYear:"&fWorkYear))
إذا كانت النتيجة<>0 ثم
Response.Write("تم تحديث البيانات بنجاح!")
نهاية إذا
بالإضافة إلى ذلك، يمكنك استخدام العبارة التالية لعرض عبارة SQL التي تم إنشاؤها بواسطة هذه الوظيفة:
Response.Write(db.wUpdateRecord("TestTable"، "UId = 1308"، Array("Name:"&fName, "WorkYear:"&fWorkYear)))
النموذج الأولي: dbCtrl.DeleteRecord(TableName,IDFieldName,IDValues)
الوظيفة: حذف السجلات المستوفية للشروط
قيمة الإرجاع: 1 (نجاح) أو 0 (فشل)
المعلمة:
TableName: اسم جدول السلسلة
IDFieldName: String اسم حقل معرف الجدول
IDValues: حالة حذف سلسلة أو صفيف، والتي يمكن أن تكون أرقام معرفات متعددة مفصولة بفواصل. إذا كانت مصفوفة، فيجب أن تتبع اصطلاح المعلمة السابق.
مثال:
معرفات خافتة، النتيجة
ids = Request.Form("selectid") 'يمكنك افتراض أن القيم التي تم الحصول عليها هنا هي 12، 34، 256، 314 (القيم المقدمة بواسطة خانة الاختيار هي هكذا)
النتيجة = db.DeleteRecord("TestTable"، "UId"، معرفات)
إذا كانت النتيجة<>0 ثم
Response.Write("تم حذف البيانات بنجاح!")
نهاية إذا
بالطبع، يمكنك أيضًا تحديد شروط أخرى باستخدام السلاسل أو المصفوفات، مثل:
النتيجة = db.DeleteRecord("TestTable"، "UId"، "IsActive = 0 And FirstName = 'Tom'")
بالإضافة إلى ذلك، يمكنك استخدام العبارة التالية لعرض عبارة SQL التي تم إنشاؤها بواسطة هذه الوظيفة:
Response.Write(db.wDeleteRecord("TestTable"، "UId"، المعرفات))
النموذج الأولي: dbCtrl.ReadTable(TableName, Condition, GetFieldNames)
الوظيفة: الحصول على محتويات الحقول الأخرى في سجل بناءً على شروط محددة
قيمة الإرجاع: سلسلة (GetFieldNames عبارة عن حقل واحد) أو صفيف (GetFieldNames عبارة عن حقول متعددة)
المعلمة:
TableName: اسم جدول السلسلة
الشرط: شرط استعلام سلسلة أو صفيف، إذا كان مصفوفة، فيجب أن يتبع اصطلاح المعلمة السابق.
GetFieldNames: سلسلة اسم حقل واحد أو أسماء حقول متعددة مفصولة بفواصل
مثال:
خافت السائل، النتيجة
uid = rs("postid") 'افترض أن هذه هي قيمة معرف المستخدم في مجموعة سجلات على الصفحة
النتيجة = db.ReadTable("UserTable"،"UId =" & uid، "اسم المستخدم")
الاستجابة.الكتابة ("الناشر:" والنتيجة)
يجب أن أقول أنه في التطبيقات الفعلية، ربما تكون هذه الوظيفة هي الأكثر استخدامًا. ما تراه أعلاه هو مثال شائع جدًا من قيمة واحدة للحصول على حقل آخر في جدول آخر قيمته تساوي تلك القيمة من الصعب نطقها بعض الشيء، ولكن هذا هو بالضبط ما يعنيه). سيوضح لك المثال التالي كيفية الحصول على قيم مقابلة متعددة بناءً على هذه القيمة.
خافت السائل، النتيجة
uid = rs("postid") 'افترض أن هذه هي قيمة معرف المستخدم في مجموعة سجلات على الصفحة
النتيجة = db.ReadTable("UserTable"،"UId=" & uid، "اسم المستخدم، UserSex، UserAge")
Response.Write("الناشر:" & النتيجة(0) & "<br /> الجنس: " & النتيجة(1) & "<br /> العمر: " &النتيجة(2))
كما ترون، الأمر بهذه البساطة يؤدي إلى إدخال أسماء حقول متعددة.
النموذج الأولي: dbCtrl.C(objRs)
الوظيفة: إغلاق كائن مجموعة السجلات
المعلمة:
objRs: كائن كائن مجموعة سجلات على الصفحة
مثال:
خافتات
تعيين rs = db.GetRecordDetail("TestTable"، "Id=123" )
"الرمز الخاص بك هنا ..."
ديسيبل.C (RS)
تم استخدام هذه الوظيفة في العديد من الأمثلة أعلاه، لذا لن أشرحها كثيرًا، فهي تعادل rs.Close: set rs = Nothing.
clsDbctrl.rar