تستخدم هذه المقالة ملف DLL الذي تم إنشاؤه بواسطة VB لتغليف رمز ASP للاتصال بقاعدة البيانات (مع أخذ قاعدة بيانات Access كمثال).
في الظروف العادية، عندما نستخدم ASP للاتصال بقاعدة بيانات Access، نقوم عادةً بتنفيذ العمليات التالية
'//Proconn.asp
<%
dimProConn
تعيين ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
'تم تغيير قاعدة بيانات Access التي كانت في الأصل DB.mdb إلى ملف بلاحقة DB.asp، وكلمة مرور قاعدة البيانات هي 123
إذا كان err.Number <> 0 ثم
ResPonse.Write "لا يوجد رابط لقاعدة البيانات، يرجى التحقق"
الاستجابة. النهاية
آخر
ResPonse.Write "تم الاتصال بقاعدة البيانات بنجاح"
الاستجابة. النهاية
نهاية إذا
%>
إذا تم تكوين الخادم، قم بالوصول إلى Proconn.asp إذا كان اتصال قاعدة البيانات ناجحًا، فسيتم إخراج "اتصال قاعدة البيانات ناجح".
ومع ذلك، فإن مستوى الأمان لرمز ASP هذا منخفض جدًا. إذا شاهد الآخرون ملف ASP الأصلي، فإذا كان هناك ملف قاعدة البيانات هذا، فيمكن للآخرين فتح قاعدة البيانات الخاصة بك بسهولة للعمليات.
وهنا تأتي مهمتنا، كيف يمكننا تغليف هذه المحتويات الأساسية؟
أولا، تحتاج إلى تحديد الطريقة والطريقة والكائن.
بعد التحقق من بعض المعلومات على الإنترنت، يتم تغليفها بشكل أساسي باستخدام VB لإنشاء DLL، لذلك يجب علينا أيضًا اعتماد هذه الطريقة (على الرغم من أنني لم أستخدم VB حقًا)
لتحديد الطريقة، فما هو الكائن الذي نحتاج إلى تغليفه ؟
تعال وانظر للجميع
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
إنه الكود الأكثر أهمية، ومن الأفضل تغليف هذا الكود في ملف DLL تم إنشاؤه باستخدام VB.
السبب ليس كله
dimProConn
تعيين ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
كلها مغلفة (نظرًا لوجود تعليمات على الإنترنت لتغليف رمز الاتصال بالكامل) لأنه عندما تشير ملفات asp الأخرى إلى Proconn.asp،
أحتاج أيضًا إلى ProConn بالداخل لإجراء عمليات أخرى، إذا كان مغلفًا، فسيكون من غير المناسب الرجوع إليه وتشغيله.
(التفسير أعلاه لكائن التغليف هو رأيي الشخصي. قال بعض الأصدقاء إن التغليف الشامل ليس له أي تأثير على استخدام ProConn. لا أفهم هذا. من فضلك أخبرني إذا كنت تعرف)
أريد فقط تغليف الجزء الأكثر أهمية ""driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")"
لتحليل هذه الفقرة محتويات الحزمة، .
النصف الأول منه عبارة عن سلسلة:
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
استخدم & لتسلسل النصف الثاني من سلسلة أخرى.
السلسلة الأخرى في النصف الثاني هي القيمة المرجعة لوظيفة الكائن Server.MapPath.
لنبدأ عملية التغليف.
أولاً، قم بإنشاء مشروع ActiveX DLL جديد ضمن VB. قم بتغيير اسم المشروع Project1 إلى ConDBDLL؟؟
سيتم استخدام اسم المشروع واسم الطريقة عند استدعاء مكتبة الارتباط الحيوي (DLL) هذه. يمكنك تعريفهما وفقًا لقواعد التسمية الخاصة بك، ولكن يرجى توخي الحذر عند استخدامها بعناية.
تتم كتابة جزء التعليمات البرمجية من DLL هذا كما يلي:
Dim rp As Response
ديم rq حسب الطلب
خافت أب كتطبيق
خافت ريال كخادم
Dim sn As Session
Sub Public OnStartPage(MyScriptingContext As ScriptingContext)
تعيين rp = MyScriptingContext.Response
قم بتعيين rq = MyScriptingContext.Request
تعيين sr = MyScriptingContext.Server
تعيين ap = MyScriptingContext.Application
قم بتعيين sn = MyScriptingContext.Session
النهاية
الفرعية العامة الفرعية OnEndPage()
تعيين RP = لا شيء
تعيين rq = لا شيء
تعيين ريال = لا شيء
تعيين ap=لا شيء
تعيين sn = لا شيء
نهاية الفرعية
'البيان أعلاه ضروري. لقد تم تبسيط الكائن الأصلي ومعالجته في وظيفتين أساسيتين.
الوظيفة العامة ConnectDB() As Variant
ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid =;pwd=123; DBQ = "
نهاية الوظيفة
"تعالج الوظيفة المذكورة أعلاه النصف الأول من السلسلة وترجع محتوى هذه السلسلة مباشرة
" بالإضافة إلى ذلك، حدد الوظيفة التالية لمعالجة النصف الثاني من المحتوى
الوظيفة العامة DBPath() كمتغير
DBPath = sr.MapPath("DB.asp")
وظيفة النهاية
'لاحظ أن ما ورد أعلاه يستخدم sr، فلا تستخدمه كخادم.
لقد وصلنا الآن إلى الخطوة الحاسمة، أضف مرجع "مكتبة كائنات ObjectContext لصفحات Microsoft النشطة" إلى هذا المشروع.
لإضافة طريقة، حدد "مشروع" -> "مرجع" في القائمة وحدده في مربع الحوار المفتوح.
بالمناسبة، نحتاج أيضًا إلى تحديد "مكتبة كائنات بيانات Microsoft activeX 2.6"
لتنفيذ العمليات المذكورة أعلاه، يمكننا تجميع وإنشاء ملف DLL. (لا تنس تغيير اسم المشروع واسم الطريقة مسبقًا.)
قم بإعداد ملف قاعدة البيانات DB.asp (تم كتابته بواسطة DB. يتم تشكيل mdb عن طريق تغيير اللاحقة، وكلمة المرور هي 123)
وفيما يلي رمز استدعاء ملف asp المغلف الذي يتصل بقاعدة البيانات:
'//ProConn.asp
<%
dimProConn
تعيين ProConn=Server.CreateObject("ADODB.CONNECTION")
DimConDB
تعيين ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB هو كائن DLL الذي تم إنشاؤه
Dim StrConn
"تحديد سلسلة."
StrConn = ConDB.ConnectDB() & ConDB.DBPath()
"قم بربط الجزأين لتشكيل سلسلة."
ProConn.OpenStrConn
'تنفيذ عمليات كائن قاعدة البيانات
%>
نظرًا لأنه ملف DLL تم إنشاؤه بنفسك، بعد نسخه إلى الدليل المقابل، يجب تسجيله قبل استخدامه.
الطريقة المسجلة، التي يتم تنفيذها في "تشغيل":
Regsvr32.exe lyfUpload.dll
طريقة إلغاء تسجيل ملف DLL هذا هي: Regsvr32.exe /u lyfUpload.dll
بعد اكتمال التسجيل، يتم إنجاز عملنا بشكل أساسي الآن يمكننا استخدام طريقة التغليف هذه للاتصال بالهدف قاعدة بيانات.
ومع ذلك، هناك شيء واحد يحتاج إلى اهتمام خاص:
لأن
DimConDB
تعيين ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB هو كائن DLL الذي تم إنشاؤه. هذا كائن تم إنشاؤه في ASP، بما في ذلك ProConn، ثم نتذكر تحرير هذين الكائنين في أي ملفات ASP أخرى تستخدم (مرجع) ProConn.asp!
بروكون.إغلاق
setProConn=لا شيء
setConDB=لا شيء
وإلا، فسيصبح النظام مرهقًا بشكل متزايد لأنه لن يتم تحرير الكائنات.
فيما يتعلق بهذه الطريقة لتغليف كود ASP للاتصال بقاعدة بيانات Access، أعتقد أنها قابلة للتطبيق تمامًا على طريقة الاتصال بقواعد البيانات الأخرى.
أعتقد أن طريقتي ليست الأفضل، وإذا كان هناك أي عيوب، فيرجى تصحيحها إذا كنت قد قرأتها، شكرًا لك مقدمًا.