السلام عليكم
ADO.NET هى بيئة ميكروسوفت للتخاطب مع مخازن البيانات المختلفة ضمن اطار العمل .NET
واهم فئاتها تقع فى فضاءات الاسماء التالية:
•System.Data
•System.Data.Common
•System.Data.SqlClient
•System.Data.OleDbClient
•System.Data.SqlTypes
ADO.NETالشكل التالى يبين التركيب الهرمى لــ
يمكن التعامل مع قواعد البيانات بطريقتين وهما الطريقة المباشرة وتسمى الوضع المتصلCONNECTED MODE وبطريقة غير مباشرة وتسمى الوضع المنفصل DESCONNECTED MODE
وسنقوم هنا بشرح الطريقة الاولى وهى تستخدم فى حاله بناء التطبيقات المفرده اى عندما يكون للنظام مستخدم واحد وتوجد واجه المستخدم ومخزن قااعدة البيانات على نفس الجهاز.
ولنبدء بالتعرف على اهم الكائنات المستخدمة فى هذا الوضع
كائن الاتصالConnection Objects
عن طريق خصائص كائن الاتصال تستطيع تحديد مصدر البيانات والشروط الللا زمه لتحقيقه. وبالطرقmethods يمكنك التحكم فى الاتصال وقطع الاتصال مع المصدر. كما يمكن منه انشاء كائن اوامرCommand وكائن تحويلTransaction
والان لنرى كيف يمكن انشاء كائن الاتصال والتعامل معه بالكود:
انشاء كائن الاتصال
Dim cn As OleDbConnection cn = New OleDbConnection()
نص الاتصال وهو عبارة عن نص يمثل عدة معطيات الضرورية لانشاء اتصال وهو يختلف على حسب المزود
على سبيل المثال نوع مزود البياناتProvider,مصدر البياناتData Source ,اسم المستخدم وكلمة المرور... الخ
والصيغة العامه له هى:
strConn = "Setting1=Value1;Setting2=Value2;..."
وهذه بعض الامثله لنص الاتصال:
• الاتصال بقاعدة بيانات sql server
Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyDatabase; User ID=MyUID;Password=MyPassword; واذا كان على الجهاز اكثر من نسخة من sql server يجب ان تحدد النسخة التى تريد التعامل معها Provider=SQLOLEDB;Data Source=MyServer\MyInstance; Initial Catalog=MyDatabase;User ID=MyUID;Password=MyPassword; ايضا اذا كنت تعمل على شبكة وتعتمد على الامان فى الشبكة استخدم خاصيةIntegrated Security وشيل اسم المستخدم وكلمة السر Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyDatabase; Integrated Security=SSPI; ;
• الاتصال بقاعد بيانات access
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\To\MyDatabase.MDB; ويمكنك عدم تحديد المسار الكامل لقاعدة البيانات وذلك بوضع ملق قاعدة البيانات فى مجلد bin حيث سيقوم ado بالبحث فى هذا المجلد Provider=Microsoft.Jet.OLEDB.4.0; Data Source= MyDatabase.MDB; اذا كانت قاعدة البيانات تحتوى على كلمة مرور Provider=Microsoft.Jet.OLEDB.4.0; Data Source= Data\MyDatabase.MDB; Jet OLEDB:Database Password=MyPassword;
الان يمكنك اضافة نص الاتصال لكائن الاصال بطريقتين
عن طريق الخاصية ConnectionString
Dim strConn As String strConn = "Provider=SQLOLEDB;Data Source=(local;" & _ "Initial Catalog=Northwind;Trusted_Connection=Yes;" Dim cn As OleDbConnection cn = New OleDbConnection() cn.ConnectionString = strConn
عند انشاء الكائن فى منشئ الفئة
Dim strConn As String strConn = "Provider=SQLOLEDB;Data Source=(local;" & _ "Initial Catalog=Northwind;Trusted_Connection=Yes;" Dim cn As OleDbConnection cn = New OleDbConnection(strConn
فتح واغلاق الاتصال
يتم فتح الاتصال باستدعاء الطريقةOpen()
ويتم الاغلاق باستدعاء الطريقة Close()
Dim strConn As String = "Provider=SQLOLEDB;Data Source=(local);" & _ "Initial Catalog=Northwind;Trusted_Connection=Yes;" Dim cn As New OleDbConnection(strConn) cn.Open() ... cn.Close()
احواض الاتصال Connection Pooling
فتح واغلاق الاتصال يكلف الكثير من مصادر النظام واذا كنت تعمل على مشروع متعدد الطبقات multi-tiered يمكنك استخدام احواض الاتصال لتحسين من كفاءة التطبيق والمحافظه على مصادر النظام
وحوض الاتصال يكون مفعل افتراضيا , لذلك عند اغلاق الاتصال فهو لا يتم اغلاقه فعليا ولكن يتم ترحيله الى حوض الاتصال لاعادة استخدامه
Dim strConn As String = "Provider=SQLOLEDB;Data Source=(local);" & _ "Initial Catalog=Northwind;Trusted_Connection=Yes;" Dim cn As New OleDbConnection(strConn) Dim intCounter As Integer For intCounter = 1 To 5 cn.Open() cn.Close() Next
الكود السابق يقوم بفتح واغلاق نفس الاتصال خمس مرات
كما قلنا ان حوض الاتصال يكون فعال افتراضيا فاذا كنت تريد ايقافه لسبب ما يتم ذللك باضافة الخاصية التالية لنص الاتصال OLE DB Services=-4;
وبالنسبة لمستخدمى كائن SqlConnection ضف هذه الخاصية لنص الاتصال Pooling=False;
استرجاع مخطط يمثل معلومات عن قاعدة بيانات
يتم ذلك بالطريقة GetOleDbSchemaTable ولهذه الطريقه باراميتران الاول عبارة عن احدى قيم المرقم OleDbSchemaGuid وبه تحدد نوع مخطط البيانات هل هو لللاعمده او الجدوال او اجراءات والبارميتر الثانى وهو يمثل قيود تحدد فى كيفية استرجاع البيانات يعمل كفلتر فعن طريقه مثلا يمكن تحديد الاعمدة المراد جلبها من جدول محدد وهو يكون على هيئة مصفوفة من القيم ويمكن الاستغناء عن البارميتر الثانى بارسال القيمة nothing
الكود التالى يقوم بجلب كل المعلومات عن الاعمدة فى كل الجداول
Dim strConn As String = "Provider=SQLOLEDB;Data Source=(local);" & _
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
cn.Open()
Dim tbl As DataTable
tbl = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
الكود التالى يقوم باسترجاع الاعمده من جدول Customers
Dim strConn As String = "Provider=SQLOLEDB;Data Source=(local);" & _
"Initial Catalog=Northwind;Trusted_Connection=Yes;"
Dim cn As New OleDbConnection(strConn)
cn.Open()
Dim objRestrictions As Object()
objRestrictions = New Object() {Nothing, Nothing, "Customers", Nothing}
Dim tbl As DataTable
tbl = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, objRestrictionsخاصية الحاله State Property
وهى تعود باحدى قيم المرقم ConnectionState وهذه القيم هى
• Broken ويحدث عندما يكون قد تم فتح الاتصال ولكن غير قادر على الاتصال بسبب عطل فى الشبكة او مشكله فى السيرفر مثلا
• Closed اى ان الاتصال مغلق
• Open اى ان اتصال مفتوح
• Connicting جارى الاتصال
• Executing الاتصال يقوم بتنفيذ استعلام
• Fetching الاتصال مشغول فى جلب بيانات
If cn.State = ConnectionState.Closed Then 'Do something here EndIf

