المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس الواحد والستون ADO.net - دورة .net 2008


khaledbelal
03-07-2010, 03:05 PM
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

مقدمة :

ال ADO.net او ما تعرف اختصاراً باسم Active Data Object.net هي امتداد للنسخة القديمة ADO التي كانت موجودة في اصدارات فيجوال بيسك 6 من مايكروسوفت ، وهي امتداد ايضاً لعالم مزودات البيانات او Data Providers التي مرت بمراحل تطور عديدة وشهدت العديد من التقنيات مثل DAO, RDO .

وعلى عكس النسخة القديمة ADO التي كانت مخصصة لفتح اتصال بين قاعدة البيانات والبرنامج او بين الخادم والعميل Client/Server فإن ADO.net اصبحت مزودة بخدمة disconnected بحيث لن تصبح مضطراً للاتصال دائماً بقاعدة البيانات هناك فروقات أخرى هذا موجزها :

- الدعم الكامل ل XML .
- زيادة أنواع البيانات المعتمدة والدوال المستخدمة .
- زيادة السرعة .
- انها اصبحت managed code بالكامل .

يمكنك الاطلاع على مزيد من التفاصيل حول الفروقات هنا :
http://msdn.microsoft.com/en-us/library/904fck4k(VS.71).aspx

البدء باستخدام ADO.net :

فقط كل ما عليك هو استيراد المكتبات الخاصة بها ، تجدها جميعاً تحت اسم System.Data ، بعدها سيكون عليك تقرير فيما إذا كنت ترغب في العمل من خلال الوضع Connected أو Disconnected ، في حالة الأولى ستكون على اتصال دائم بقاعدة البيانات اما الحالة الثانية فستتصل على مراحل لتجلب البيانات او لتقوم ببعض التعديلات الجماعية ، في بداية دروسناً لن نتعامل سوى مع Connected فيما سنعود لاحقاً للوضع الآخر .

مكونات ADO.net Data Provider :
Connection : يمكنك من انشاء اتصالك بقاعدة البيانات .
Command : تمكنك من تنفيذ جملة استعلام SQL على قاعدة البيانات .
DataReader DbDataReader IDataReader : تمكنك من قراءة البيانات الناتجة عن عملية استعلام على سبيل المثال ، لكن الناتج سيكون للقراءة فقط وفي اتجاه واحد فقط .
DataAdapter DbDataAdapter IDataAdapter : تمكنك على الحصول على صورة من البيانات المطلوبة سواء جدول او جملة استعلام وتمكنك من التنقل بينها وعمل اضافة وتعديل وحذف وخلافه .
Parameter DbParameter IDataParameter: خاصة بتمرير متغيرات إلى جمل الاستعلام .

ال Data Providers المدعومة من قبل مايكروسوفت :
System.Data.OleDb :
يمكن استخدامها للتعامل مع اي نوع من قواعد البيانات ، لكن لو كان لقاعدة البيانات مزود آخر موجود في القائمة يفضل استخدامه نظراً لإن هذا النوع هو الأبطأ .
System.Data.SqlClient :
يفضل دوماً استخدامها للتعامل مع قواعد البيانات SQL Server حيث انها تحتوي على مجموعة من المهام الخاصة بالتعامل مع هذا النوع من قواعد البيانات .
System.Data.SqlServerCe :
يفضل استخدامها في حالة التعامل مع قاعدة بيانات SQL Server CE الخاصة بالتعامل مع ال Pocket PC .
System.Data.Odbc :
اي ملف Odbc يمكن التعامل معه من خلالها .
System.Data.OracleClient
يفضل التعامل مع قواعد البيانات أوراكل من خلالها .

التعامل مع مزودات خدمة أخرى Third-Party ADO.NET Data Providers :
في الفقرة السابقة ذكرنا مزودات لقواعد البيانات الرئيسية ، ولكن ماذا عن قواعد البيانات MYSQL أو FoxPro أو DB2 مثلاً ؟
هل سنضطر في النهاية لاستخدام OleDb ذات السرعة الأبطأ والامكانيات المحدودة نسبياً ؟

لا طبعاً ، قامت اغلب الشركات بتطويرData Providers لمنتجاتها خاصة ب ADO.net أو حتى شركات تقدم مزودات معتمدة من الشركات الأصلية تتمتع بسرعة اكبر ومميزات وخدمات اضافية ، هذا الرابط مثال عليها :
http://www.sqlsummit.com/dataprov.htm

مكونات الفئة System.Data :

تحتوي هذه الفئة على كل ما يخص قواعد البيانات والتعامل معها من دوال وخصائص وحتى رسائل الأخطاء exceptions ، سنستعرض هنا سريعاً أهم محتويات هذه الفئة حيث ستفيدنا في التعرف على خصائصها :

IDbConnection Interface :
منه يتم اشتقاق الفئة الخاصة بالاتصال بقاعدة البيانات ، يحتوي على الدوال التالية :

public interface IDbConnection : IDisposable

{
string ConnectionString { get; set; }
int ConnectionTimeout { get; }
string Data**** { get; }
ConnectionState State { get; }
IDbTransaction BeginTransaction();
IDbTransaction BeginTransaction(IsolationLevel il);
void ChangeData****(string data****Name);
void Close();
IDbCommand CreateCommand();
void Open();
}

IDbCommand Interface :
يتم منه اشتقاق الفئات الخاصة بالتعامل لاحقاً مع تنفيذ جمل الاستعلام ، يحتوي على الدوال التالية :

public interface IDbCommand : IDisposable
{
string CommandText { get; set; }
int CommandTimeout { get; set; }
CommandType CommandType { get; set; }
IDbConnection Connection { get; set; }
IDataParameterCollection Parameters { get; }
IDbTransaction Transaction { get; set; }
UpdateRowSource UpdatedRowSource { get; set; }
void Cancel();
IDbDataParameter CreateParameter();
int ExecuteNonQuery();
IDataReader ExecuteReader();
IDataReader ExecuteReader(CommandBehavior behavior);
object ExecuteScalar();
void Prepare();
}


IDbDataParameter
تحتوي على :

public interface IDbDataParameter : IDataParameter
{
byte Precision { get; set; }
byte Scale { get; set; }
int Size { get; set; }
}

IDataParameter :
تحتوي على :

public interface IDataParameter
{
DbType DbType { get; set; }
ParameterDirection Direction { get; set; }
bool IsNullable { get; }
string ParameterName { get; set; }
string SourceColumn { get; set; }
DataRowVersion SourceVersion { get; set; }
object Value { get; set; }
}

IDbDataAdapter :

public interface IDbDataAdapter : IDataAdapter
{
IDbCommand DeleteCommand { get; set; }
IDbCommand InsertCommand { get; set; }
IDbCommand SelectCommand { get; set; }
IDbCommand UpdateCommand { get; set; }
}

IDataAdapter :

public interface IDataAdapter
{
MissingMappingAction MissingMappingAction { get; set; }
MissingSchemaAction MissingSchemaAction { get; set; }
ITableMappingCollection TableMappings { get; }
int Fill(System.Data.DataSet dataSet);
DataTable[] FillSchema(DataSet dataSet, SchemaType schemaType);
IDataParameter[] GetFillParameters();
int Update(DataSet dataSet);
}


IDataReader :

public interface IDataReader : IDisposable, IDataRecord
{
int Depth { get; }
bool IsClosed { get; }
int RecordsAffected { get; }
void Close();
DataTable GetSchemaTable();
bool NextResult();
bool Read();
}


IDataRecord :


public interface IDataRecord
{
int FieldCount { get; }
object this[ string name ] { get; }
object this[ int i ] { get; }
bool GetBoolean(int i);
byte GetByte(int i);
char GetChar(int i);
DateTime GetDateTime(int i);
Decimal GetDecimal(int i);
float GetFloat(int i);
short GetInt16(int i);
int GetInt32(int i);
long GetInt64(int i);
...
bool IsDBNull(int i);
}

نكمل في الدرس القادم مع البدء باضافة قواعد بيانات إلى تطبيقاتنا ...

ماريا إسلام
05-03-2011, 10:47 PM
وعليك السلااام
جزاكم الله خيرااا كثيراا
//