مقدمة في ربط قواعد البيانات داخل بيئة الـ .NET باستخدام الـ VB.NET

تعتبر بيئة الـ .NET من التقنيات الحديثة والمتميزة والمطورة من قبل شركة Microsoft® عن أنظمتها القديمة مثل الـ VB6.0 و تقنية الـ ADO، حيث تقوم التقنية الجديدة على مبدأ الـ Object Oriented Programming البرمجة الكائنة التوجه وبهذا سوف نستعرض الـ ADO.NET على شكل مجموعة من الفئات (Objects) الموجودة ضمن المجال System.Data والتي تمثل بيانات محفوظة تحت أنظمة قواعد البيانات المختلفة. حيث تمتاز الـ ADO.NET بميزة التعامل مع مصدر البيانات بطريقتين (وضعين) الأول وضع متصل Connected والوضع الأخر وضع منفصل Disconnected وتوضيحا لهذا الوضعان بشكل مختصر حيث أن الوضع المتصل يقوم بالتعامل مع مصدر البيانات مثل البث المباشر Live View حيث أن أي خلل في الاتصال قد يسبب مشاكل في البرنامج أو البيانات. بينما النوع الثاني المنفصل فهو شبيه بالبرامج التلفزيونية المسجلة حيث يتم التعامل مع البيانات بشكل منفصل عن المصدر وهم هنا نمثلهم بالجمهور (مشاهدين) والذين يمثلون مصدر البيانات مما يساعد مقص الرقيب قي التلفاز من إزالة الشوائب والأخطاء وكذلك الوضع المنفصل يعمل مع البيانات بشكل منفصل دون الحاجة أي اتصال دائم يعني أخذ نسختي من البيانات أجري عليها أي تعديل أريده أو إجراء مثل الاستعلامات وحتى تغير العلاقات وأعكس التغيرات في ما بعد على المصدر.

وقد يرى البعض أو يتساءل عن أيها أحسن أو أفضل للاستخدام ولماذا هاتان التقنيتان وليس تقنية واحدة على الأسلوب القديم؟

فأجيب على هذه التساؤلات أن لكل طريقة حسناتها وسيئتها وتوجد هاتان التقنيتان بسبب الاختلاف الكبير بين وجهات نظر المبرمجين من ناحية التعامل مع مصدر البيانات وخاصة السيرفرات Servers التي تحتضن قواعد البيانات فمنهم يفضل التقنية الأولى لأنه يبقى مرتبط بالمصدر وتنعكس التغيرات بشكل مباشر. وبينما يرى الطرف الأخر أن التقنية الأخرى أفضل لأنها تخفف من الضغط على المصدر فكل واحد يأخذ نسخته الخاصة من البيانات التي قام بطلبها. وسوف أقوم بتفصيل الفروق في الدروس الخاصة بكل وضع على حدى.

وقبل الانتقال إلى كائنات الـ ADO.NET فيجب أن نذكر ميزة استقلالية الشيفرة البرمجية الخاصة بنا عن الهيئة المتبعة مع النظام حيث نستخدم نفس الشفرة مع الأنظمة المختلفة مثل: Oracle®، MSSQL Server®، وغيرها من أنظمة إدارة قواعد البيانات وكل ذلك دون حاجة لأي تغير في الشيفرة المصدرية وتعرف هذه الميزة باسم .NET Data Provider وتوجد ثلاث مزودات رئيسية مدعومة في بيئة .NET Framework® كمل يلي:

(1)   OLE DB .NET Provider: وتستخدم للتعامل مع التقنية القديمة المبنية على تقنية COM.

(2)  SQL Server .NET Provider: وهي موجهة إلى مصادر البيانات المنتجة على الإصدار السابع من SQLServer® وما بعدها ومن أجل استخدام الأنظمة الأقدم نستخدم المزود الأول.

(3)  ODB .NET Data Provider: وهي تمكنك من الوصول إلى مصادر البيانات المختلفة ولكن هنالك بعض المأخذ عليها وهي قلة كفاءتها من التقنية القديمة رقم (1).

بعد هذه المقدمة الطويلة نبدأ بفئات الـ ADO.NET، ولكن قبل أن تبدأ أنصحك أن تأخذ استراحة ربع ساعة ومن بعدها تكمل.


فئات الـ ADO.NET:

حيث أن الـ ADO.NET تحتوي على العديد من الفئات ولكنها  ترتكز على خمس فئات رئيسية هي مرتبة حسب ترتيب الاستخدام:

1-     Connection.

2-     Command.

3-     DataReader.(وضع متصل)

4-     DataAdapter.(وضع منفصل)

5-     DataSet. ( وضع منفصل)


وبفهم هذه الفئات الرئيسية نستطيع التعامل مع الفئات المشتقة منه والربط بين هذه الكائنات، ولكن قبل الانتقال إلى قسم الوضع المتصل أو قسم الوضع المنفصل سأقوم بشرح الفئتان المشتركة بين هذا الوضعين.


1)      الكائن Connection:

وهذه الفئة (كائن) يستخدم من أجل الاتصال بمصدر البيانات، وتتم عملية إنشاء الاتصال قبل أي عنصر ارتباط بمصدر البيانات، وكثرة أنظمة قواعد البيانات فسوف أتحدث عن استخدام مزودات SQL Server .Net Data Provider وذلك لاستخدامها في تطبيقات الـ Client – Server وتطبيقات الويب بشكل كبير ونستخدم في هذه الحالة اسم الفئة SqlConnection مثال:

Dim Con as new SqlConnection()

وبعد إنشاء كائن الاتصال يجب تحديد نص الاتصال والذي يحدد المصدر وبعض الأمور الضرورية عن نوع الاتصال حيث تكومن من نوع String:

Dim ConStr as new String = “Provider = اسم سيرفر الاسكيول الخاص بك;” _

                                                 & “pwd = كلمة السر الخاصة بالمتسخدم;” _

                                                 & “User Id = اسم مستخدم النظام;”

Con.ConnectionString =  ConStr

ملاحظة: هنالك مجموعة من الخصائص التي توجد لنص الاتصال يمكنكم مراجعتها في مكتبة MSDN.


بعد عملية إسناد نص الاتصال الصحيح فيمكننا الآن من فتح الاتصال بالطريق Open():

Con.Open()

وعند الانتهاء من النظام فنستخدم الطريقة Close() لإغلاق الاتصال:

Con.Close()

ويمكننا معرف حالة الاتصال باستخدام الخاصية State التابعة لكائن الاتصال وتعود هذه الخاصية بعدة قيم كما يلي:


–         Closed اتصال مغلق.

–         Open اتصال مفتوح.

–         Connecting جاري الاتصال.

–         Executing يتم تنفيذ استعلام على الاتصال.

–         Fetching يتم استرداد بيانات (سجلات مصدر البيانات).


2)      كائن الأمر Command:

بعد عملية إنشاء الاتصال يأتي دور الاستعلامات باستخدام الـ SQL مع مصدر البيانات وهو في حالتنا هذه MSSQL Server® حيث نستخدم الاستعلامات لجلب البيانات أو عمل تعديلات اعتمادا على الـ SQL  المستخدم كل هذا بالاعتماد على الربط بين الـ Connection والـ Command.

ولإنشاء كائن الأمر Command يتوجب علينا استخدام نفس نوع المزود المستخدم لكائن الاتصال وبذلك يكون نوع الأمر لدين من فئة SQLCommand ويتم كما يلي:

Dim Cmd as new SqlCommand()

بعد عملية التعريف (إنشاء) كائن الاتصال يجب تحديد مجموعة من الخصائص للأمر كما يلي:

1-     ربط الأمر مع كائن الاتصال حي ث يجب أن يكون الاتصال مفتوح:

Con.Open()

Cmd.Connection = Con

ملاحظ: يجب أن تلاحظ أنه في حال كون الاتصال مغلق فلن تتمكن من عملية إجراء الاستعلامات.


2-     تنفيذ جمل الاستعلام SQL:

في حال الرغبة في تنفيذ جمل الاستعلام على كائن الـ Command فلا بد من تحديد نوع جملة الـ SQL التي يراد تنفيذها، هل هي جملة تنفيذية أو تقليدية.

تقليدي: هي جمل الـ SQL التي تقوم باسترجاع أو قراءة بيانات محددة من مصدر البيانات دون التأثير بمحتوياتها. ومن أجل التعامل معها نستخدم الطريقة ExecuteXXX() حيث سنتعرض للصيغ البديلة لـ XXX في الدروس القادمة.
تنفيذية: هي تلك الجمل التي تعمل على تغيرات في البيانات في قاعدة البيانات ويتم التعامل معها باستخدام الطريقة ExecuteNonQuery() والتي تعود بقيمة عددية تمثل عدد السجلات التي تأثرت بهذا الاستعلام وحتى نتمكن من أي استدعاء يجب أولا القيام بالإجراءات التالية:
1-     تعريف جملة الاستعلام من نوع String:

Dim SQL as String = “😀elete From My_Table where MY_field = 1″

2-     تحديد نوع الأمر المستخدم حيث سنتعرض لأنواعها بتفصيل في الدرس القادم.

Cmd.CommandType = CommandType.Text

3-     تعين نص الاستعلام.

Cmd.CommandText = SQL

4-     ثم نقوم بتنفيذ الأمر المطلوب.

Cmd.ExecuteNonQuery()

أو يمكن استبدال الطرق الثلاث الأولى بـ:

Dim Cmd as new SqlCommand( SQL, Con)

شكراً