یکی از اعمال مورد نیاز در کار با دادههای یک بانک اطلاعاتی، جستجو، مرتب سازی و فیلتر کردن دادهها بر حسب نیازمندیهای برنامه کاربردی می باشد. در ADO.NET برای انجام این اعمال روی دادهها در یک DataTable دو روش وجود دارد: یکی استفاده از متد Select از شیئ DataTable و دیگری استفاده از شی DataView. شیئ DataView دارای توانایی بیشتری نسبت به متد Select از شیئ DataTable میباشد و کار با آن نیز سادهتر است. در این مقاله سعی شده به اختصار درباره خصوصیتها، متدها و نحوه کار با شیئ DataView اطلاعاتی ارائه شود.
شیئ DataView به مانند یک منبع برای اتصال کنترلهای دیگر به آن مورد استفاده قرار می گیرد. این شیئ نمایی از یک شیئ DataTable میباشد که برای جستجو، فیلتر، مرتب سازی و حتی دستکاری دادههای آن شیئ DataTable مورد استفاده قرار میگیرد. هر شیئ DataView شامل یک مجموعه DataRowView می باشد که مشابه شیئ DataRow در DataTable هستند. این اشیاء دارای ویژگیهایی هستند که در زیر به اختصار توضیح داده شدهاند:
DataView: شیئ DataView که سطر جاری به آن تعلق دارد را بر میگرداند.
Item: مقدار یک ستون از سطر فعلی را بر میگرداند.
Row: شیئ DataRow که در حال حاضر در حال بررسی است را بر میگرداند.
اشیاء DataView در داخل یک شیئ دیگر به نام DataViewManager قرار می گیرند. رابطه بین این دو شیئ مانند رابطه بین DataTable و DataSet می باشد. با این تفاوت که امکان دارد یک شیئ DataTable دارای چند شیئ DataView باشد که برای انجام جستجو و فیلتراسیونهای مختلف روی دادههای آن استفاده میشوند. در حقیقت در زمان اتصال یک کنترل به یک شیئ DataSet، در پروسه Data-Binding آن، کنترل به شیئ DataView مربوط به آن DataSet متصل میشود که با خصوصیت DefaultViewManager شیئ DataSet مشخص میشود.
برای ساخت یک شی DataView از متد New استفاده می شود. در مثال زیر یک شی DataView میسازیم:
Dim myDataView As New DataView
myDataView.Table = myDataSet.myTable
myDataGrid.DataSource = myDataView
myDataGrid.DataBind()
در مثال بالا ابتدا یک شیئ DataView جدید به نام myDataView ایجاد شده است. سپس خصوصیت Table آن برابر با MyDataTable از myDataSet که در برنامه کابردی ما موجود است قرار داده میشود. شی DataView دارای خصوصیتهایی میباشد که در زیر به اختصار توضیح داده شدهاند:
AllowDelete ،AllowEdit و AllowNew: با تنظیم این مقادیر Boolean می توان با دستکاری، اضافه و حذف مقادیر در DataView، مقادیر متناظر آنها را در شیئ DataTable مربوط تغییر داد.
Count: تعداد اشیاء RowView موجود در DataView جاری را بر می گرداند. (مشابه خصوصیت Count از شیئ DataTable)
Item: شیئ DataRowView که توسط اندیس به وسیله پارامتر به آن ارسال شده است را بر میگرداند.
RowFilter: عبارتی که برای فیلتر کردن سطرهای درون DataView استفاده می شود را مشخص میکند.
Sort: عبارتی که برای مرتب کردن سطرهای درون DataView به کار می رود را مشخص میکند.
Table: شیئ DataTable متناظر با DataView را مشخص می کند.
برای استفاده از خصوصیات RowFilter و Sort عبارتهایی هستند که مشابه عبارتهای محاسباتی برای متد Select از شی DataTable مورد استفاده قرار میگیرند. برای تنظیم مقادیر خصوصیت Sort که مربوط به روش مرتب سازی سطرهای DataRow است، لازم است مقادیر ستونهای مورد نظر جهت مرتب سازی را به ترتیب در داخل علامت "" قرار دهیم. برای مثال برای مرتب سازی یک DataView به ترتیب بر حسب ستونهای Date و Author به روش زیر عمل میکنیم:
myDataView.Sort = "Date, Author"
با قرار دادن عبارتهای ASC و DESC بعد از نام ستونها با یک فاصله میتوان سطرها را به ترتیب صعودی یا نزولی مرتب کرد. (حالت پیش فرض صعودی ASC است)
myDataView.Sort = "Date DESC, Author ASC"
برای تنظیم مقدار RowFilter می توان از عبارات DataColumn استفاده کرد. این عبارات شامل یک سری توابع، عملگرها، عبارات و نام ستونها میباشند که جهت انجام فیلتراسیون مورد استفاده قرار می گیرند. در این عبارتها می توان از تمام عملیات دستکاری روی رشتهها و متغیرهای رشتهای استفاده کرد. به علاوه برای استفاده از مقادیر تاریخ باید آنها را در بین علامات ## قرار داد. برای استفاده از یک ستون خاص در این عبارات تنها کافیست از نام آن ستون استفاده کنید. برای استفاده ز سطرهای فرزند از عبارت .Child قبل از آنها و برای استفاده از سطر مادر نیز از عبارت .Parent قبل از آنها استفاده کنید.
بعضی از توابع قابل استفاده در این عبارات عبارتند از: Sum ،Avg ،Min ،Max و Count. و هچنین بعضی از عملگرهای منطقی مورد استفاده عبارتند از: And Or Not < > <= >= <> In و Like. عملگر In مشخص می کند که آیا مقدار مورد نظر در محدوده تعیین شده قرار دارد یا نه؟ مقادیر مربوط به حدود باید توسط علامات '' از هم جدا شوند. برای مثال:
Command = "Author In ('K', 'M', 'N’)”
برخی عملگرهای محاسباتی مانند + – * / % نیز در عبارات DataColumn قابل استفاده هستند. تعدادی تابع نیز در این عبارات مورد استفاده قرار می گیرند که برخی از آنها عبارتند از: Convert ،Len و ISNull.
در پایان نیز سه متد مهم شیئ DataView را به اختصار مورد بررسی قرار میدهیم:
AddNew: اضافه کردن یک سطر جدید به DataView.
Delete: پاک کردن یک سطر از DataView.
Find: سطرهایی که شامل پارامتر ارسالی به این متد هستند را پیدا می کند.
شرکت مایکروسافت در ویژوال بیسیک ورژن 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 میباشد.