شركت مايكروسافت در ويژوال بيسيك ورژن 3 كه در سال 1993 ارائه داد از Jet كه هسته اصلي MS Access بود براي ايجاد ارتباط با بانكهاي اطلاعاتي استفاده نمود البته براي استفاده بهتر برنامه نويسان ، Jet را در غالب مجموعه Object هائي تحت عنوان (Data Access Object ) آورد. در نسخه 4 و 5 ويژوال بيسك ، مایكروسافت روشي ديگر براي ارتباط با بانكهاي اطلاعاتي تحت عنوان Remote Data Object = RDO را مطرح ساخت اين روش براي برنامه نويسي Client / Server روش مناسبي بود.
در دوم سپتامبر سال 1998 وقتي مایكروسافت ويژوال بيسيك ورژن 6 را ارائه داد روش جديدي تحت عنوان ( Activex Data Object ) ADO را مطرح ساخت در اين روش كه پايه و اساس آن OLEDB بود مایكروسافت بر خلاف DAO و RDO كه ساختاري پيچيده و سلسله مراتبي داشتند، از ساختاري ساده و مجزا ( غير سلسله مراتبي ) استفاده كرد و در واقع ADO هم شامل Object هائي است كه برنامه نويس بتواند از آنها براي ايجاد ارتباط با بانكهاي اطلاعاتي و انجام عمليات روي آنها استفاده كند و در تاريخ 13 February سال 2002 كه مایكروسافت نسخه نهائي Visual Basic.Net را ارائه داده روشي جديد براي كار با بانكهاي اطلاعاتي تحت عنوان ADO.Net را آورده است. اين نسخه از ويژوال بيسيك برخلاف نسخههاي قبل بطور كامل مباحث OOP را پشتيباني ميكند ( FULL OOP ) در واقع ADO.Net هم مانند ADO و RDO و ADO شامل ساختاري براي ارتباط و انجام عمليات روي بانكهاي اطلاعاتي است. ADO.net همانند RDO و DAO و برخلاف ADO داراي ساختار سلسله مراتبي ميباشد. در اين مقاله ميخواهيم به مقايسه ADO و ADO.net بپردازيم. ADO در ورژنهاي مختلفي در اين چند سال اخير به بازار آمده است با آمدن SQL Server 2000 ورژن جديد ADO يعني ورژن 2.6 از اين محصول ارائه شد و اكنون هم ADO 2.6 در سايت مایكروسافت قابل Download ميباشد.
آخرين ورژن ADO شامل 9 تا Object است كه عبارتند از :
Connection
Command
Recordset
Parameter
Field
Error
Property
Record
Stream
آبجكت Connection امكان ارتباط با Data Source كه شامل بانك اطلاعاتي است را فراهم ميسازد. بعنوان مثال اگر بخواهيم از آبجكت Recordset براي اضافه و يا حذف و يا تغيير در محتواي ركوردي استفاده كنيم اين آبجكت از Connection براي ايجاد ارتباط با بانك اطلاعاتي مثلاً SQL Server استفاده ميكند اما همانطور كه گفته شد و در شكل ملاحظه ميشود ساختار آبجكتهاي ADO بصورت سلسله مراتبي نيست و ميتوان مثلا Recordset اي ايجاد نمود كه مستقل از آبجكت Connection بتواند با بانك اطلاعاتي ارتباط برقرار نمايد.
در ADO علاوه بر آبجكتها، چهار Collection هم ديده ميشود كه عبارتند از :
Parameters
Fields
Properties
Errors
كه هركدام از آنها شامل آبجكتهائي از همان نوع هستند بعنوان مثال ساختاري كه براي Recordset كشيده شده بيان كننده آن است كه اين آبجكت شامل Collection هاي Fields و Properties بوده و مثلاً Collection مربوط به Fields شامل آبجكتهاي فيلد است.
آبجكت فيلد اطلاعاتي را راجع به يك ستون از Recordset در خود نگه داشته است.
در ADO آبجكت Command هم وجود دارد كه از آن ميتوان براي اجراي يك فرمان SQL استفاده نمود البته بهترين روش براي اجراي Stored Procedure نيز استفاده از متد Execute مربوط به همين آبجكت است .
بعنوان مثال :
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
cn.Open " Provider = sqloledb ; Data Source=serverName ; Initial Catalog = northwind ", "sa" , "password"
cmd.ActiveConnection = cn
cmd.CommandText = "sp_who"
cmd.CommandType = adCmdStoredProc
Set rs = cmd.Execute
Debug.Print rs(0)
rs.Close
از آبجكت Parameter هم براي مشخص كردن مقادير پارامترهاي ورودي يك Stored Procedure استفاده ميكنيم.
آبجكت Property براي استفاده از Dynamic Property استفاده ميشود كه Property هايي هستند كه وابسته به Provider بوده و استاندارد نيستند .
از Record براي دسترسي به يك سطر از Recordset و ويژگيهاي مربوط به آن سطر استفاده ميكنيم .و آبجكت Stream هم به منظور ذخيره و بازيابي اطلاعات بصورت باينري در يك فيلد از Record در نظر گرفته شده است.
تا اينجا باساختار ADO آشنا شديم حال به تشريح ADO.net ميپردازيم .
ADO.Net مجموعهاي از Class هاي Interface ها و دستوراتي جهت مديريت و كار با بانكهاي اطلاعاتي است. در بحث Net . مجموعهاي از Class هاي مربوط به هم در يك غالب تحت عنوان Name Space ارائه شده است Net. شامل تعدادي Name Space است كه در غالب .Net Framework قرار دارد. تمام ساختار ADO.net در چهار NameSpace قرار دارد كه عبارتند از :
System.Data.SqlClient.
System.Data.OleDb.
System.Data.Odbc.
System.Data.
اگر بخواهيم از بانكهاي SQL Server استفاده كنيم System.Data.SqlClient بهترين انتخاب است در اين NameSpace امكاناتي فراهم شده تا بتوانيم Application هاي بنوسيم و در آنها با SQL Server ارتباط برقرار نمائيم بطوريكه برنامهها از Performance بالائي برخوردار باشند.
در صورتي كه كاربر بخواهد از بانكهاي رابطه اي ديگر نظير Oracle استفاده كند ميتواند از System.Data.OleDb بهره گيرد.
System.Data.Odbc براي ارتباط با بانكهاي اطلاعاتي از طريق ODBC ميباشد System.Data هم شامل Provider هاي خاص نظير DataSet و DataTable است. ADO.net نيز شامل Object ها و Collection هائي است كه از مهمترين آنها ميتوان موارد ذيل را شمرد:
OleDBConnection
OleDBCommand
OledbDataReader
OleDBDataAdapter
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
DataTable
DataRelation
OleDBConnection آبجكتي است شبيه به آبجكت Connection در ADO ، كه امكان ايجاد ارتباط با بانك را فراهم ميسازد اين آبجكت متدهايي براي اجراي فرامين SQL نيز داراست .OleDBCommand هم مشابه آبجكت Command در ADO ميباشد.
از اين آبجكت نيز براي اجراي Stored Procedure و اجراي فرامين SQL استفاده ميشود. آبجكت بعد OledbDataReader است كه براي گرفتن اطلاعات از Database استفاده ميشود. البته لازم به ذكر است Resultset اي كه با اين روش ساخته ميشود بصورت ReadOnly و Forwardonly ميباشد. OleDBDataAdapter آبجكت جديدي در Ado.net است كه خود شامل چهار آبجكت براي انجام فرامين SQL ميباشد كه عبارتند از :
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
كه به ترتيب براي واكشي اطلاعات، اضافه نمودن اطلاعات جديد به داخل بانك ، به هنگام سازي اطلاعات و حذف اطلاعات استفاده ميشود. اين آبجكت به همراه آبجكت Dataset استفاده ميشود و براي پركردن Recordset موجود در Dataset بكار ميرود.
آبجكت بعدي Dataset است كه مهمترين آبجكت در Ado.net ميباشد اين آبجكت شامل دو Collection به نام هاي DataTables و DataRelations است. همانطور كه ميدانيد در ADO هم آبجكت Recordset داشتيم اينجا مجموعهاي از Recordset ها در داخل يك DataTables نگه داشته ميشود و ميتوان بين DataTable هاي مختلف رابطه نيز ايجاد نمود كه اين روابط هم داخل يك مجموعهاي با نام DataRelations نگه داشته ميشود. در واقع DataTable در ADO.net معادل همان RecordSet در ADO ميباشد.