مفاهيم اوليه ADO.NET
دهلران پی سی
سایت جامع علمی ,آموزشی,فرهنگی و تفریحی

برای استفاده مفيدتر از اين مقاله، توصيه می گردد، مقاله  معماری برنامه های مبتنی بر داده    را در ابتدا مطالعه نمائيد . ADO.NET ،  نسل جديدی از ADO  شرکت ماکروسافت است . نسخه ADO ،  با استفاده از مجموعه ای  اشياء ActiveX Data Object طراحی و پياده سازی شده بود. ADO.NET  گرچه در سطح ارائه پتانسيل های لازم در برخی موارد دارای شباهت هائی با ADO است ولی از نظر مدل برنامه نويسی دارای ساختاری کاملا" متفاوت( نسبت به ADO ) است.

تعريف ADO.NET

ADO.NET، مجموعه ای از کلاس ها بمنظور کار با داده ها است.

 بموازات رشد اينترنت ، طراحی و پياده سازی برنامه های مبتنی بر وب به امری متداول و نيازی همگانی مطرح شده است . در اين راستا برنامه های متعددی ، از XML بمنظور ارسال اطلاعات خود در شبکه استفاده کرده و هر روز به تعداد اين برنامه ها نيز اضافه می گردد. ADO.NET ، يک مدل برنامه نويسی  مناسب بمنظور يکپارچگی بين ويژگی های XML و ADO.NET  در فريمورک دات نت را ارائه می نمايد.

مزايای ADO.NET 
تکنولوژی فوق نسبت به ADO دارای مزايای زير است :

  • Interoperability . تکنولوژی ADO.NET از XML بعنوان فرمت ارسال اطلاعات از يک منبع داده به مقصد مورد نظر استفاده می نمايد ( داده های مستقرشده  در حافظه محلی)

  • Maintainability . بموازات افزايش کاربران يک برنامه ، ما شاهد بروز مسائلی در رابطه با منابع موجود در سيستم خواهيم بود. با استفاده از يک برنامه N-Tire ، می توان منطق برنامه را بين چندين Tire اضافی توزيع  نمود. معماری ADO.NET ، از حافظه Cache بمنظور نگهداری نسخه هائی از داده استفاده و بدين ترتيب امکان بهره برداری از اطلاعات فوق برای ساير Tire های اضافی فراهم می گردد .

  • Programmability . مدل برنامه نويسی ADO.NET کاملا" از Strongly typed data حمايت و باعث می گردد که که کدها مختصرتر و با شفافيت خاصی، بسادگی نوشته گردند . 

  • Performance . تکنولوژی ADO.NET اين امکان را فراهم می آورد تا عمليات  مازاد در ارتباط با تبديل نوع داده ها ،حذف گردد( از Strongly typed data استفاده می گردد ) .

  • Scalability . مدل برنامه نويسی ADO.NET باعث تشويق برنامه نويسان برای صرفه جوئی در منابع  سيستم و ارائه آنان برای برنامه های در حال اجراء بر روی بستر وب می گردد. با توجه به اينکه داده در حافظه محلی Cache می گردد،  ضرورتی به نگهداری بلاک هائی از بانک اطلاعاتی و يا نگهداری اتصالات فعال با بانک اطلاعاتی برای  مقاطع زمانی بعد ،  وجود نخواهد داشت .

Namespace های مرتبط با داده
فريمورک دات نت ، پتانسيل ها ی( عمليات ) خود را به چندين Namespace تقسيم و ADO.NET نيز از اين قاعده مستثنی نخواهد بود . ADO.NET عمدتا"  در Namespace  با نام System.Data  ، پياده سازی شده است.Namespace فوق،بصورت فيزيکی در اسمبلی System.Data.dll قرار دارد. برخی از بخش های ADO.NET در Namespace با نام System.Xml  قرار دارند ( مثلا" کلاس XmlDataDocument ) مشخصات هر يک از Namespace های مرتبط با داده ها بشرح زير می باشد :

  • System.Data ، هسته ADO.NET بوده و شامل کلاس هائی است که بخش غيرمتصل معماری ADO.NET را شکل می دهد ( کلاس DataSet )

  • System.Data.Common  ، کلاس های کاربردی و اينترفيس مورد نياز برای NET Data Providres .  را فراهم  می نمايد.

  • System.Data.sqlclient ، ارائه دهنده داده SQL Server.Net Data Provider   

  • System.data.OleDB ،  ارائه دهنده OLEDB.NET Data Provider    

  • System.Data.sqltypes ، کلاس ها و ساختارهای مورد نياز برای Native SQL Server Data Types  را ارائه می نمايد.( يک جايگزين سريع و ايمن برای داده های نوع ديگر).

  • System.Xml  ، کلاس ها واينترفيس های لازم بمنظور حمايت استاندارد د از پردازش های مبتنی بر XML را ارائه می نمايد. ( مثلا" کلاس XmlDataDocument)

تغييرات  ADO و ADO.NET
تغييرات متعددی در ADO.NET نسبت به ADO اعمال شده است . اغلب تغييرات فوق ، با توجه به مطالعات انجام شده در رابطه با موارد مثبت و منفی  ADO صورت گرفته است . دستاورد اين تغييرات، قدرت و انعطاف مطلوب برای ADO.NET  است .

با توجه به اينکه تمامی ارائه دهندگان داده دات نت،  عمليات تراکنشی را ارائه نمی نمايند ، ADO.NET ، پتانسيل های خود را به کلاس های مجزائی  تقسيم و در اختيار قرار می دهد، بدين ترتيب  شی اتصال ADO.NET بمراتب کم حجم تر نسبت به شی اتصال ADO خواهد بود.
Recordset در ADO ، يک شی بسيار بزرگ است . شی فوق، امکان حمايت از چندين نوع Cursor را فراهم می نمايد ( از نوع سريع  تا نوع سمت سرويس گيرنده غير متصل) . سفارشی نمودن تمام امکانات شی فوق، مشکل و در برخی موارد غيرممکن است. ADO.NET ، پتانسيل های  Recordset مربوط به ADO را به چندين کلاس تفسيم کرده است .مثلا" DataReader معادل يک Cursor سريع ، DataSet يک مدل غيرمتصل Cache شده با امکان رديابی ، ثبت و کنترل نسبت دهی  و DataAdapter قابليت سفارشی نمودن  نحوه ذخيره سازی  و بهنگام سازی  داده ها و اعمال تغييرات در يک DataSet را دارا است . 

مدل اشياء ADO.NET

مدل اشياء ADO.NET شامل دو بخش اصلی است :

  • کلاس های DataSet .کلاس های فوق ، اين امکان را فراهم می نمايند که داده ها را در يک Cache غير متصل ، ذخيره و مديريت کرد. DataSet مستقل از هر نوع منبع داده بوده و بنابراين ويژگی های آن برای تمامی برنامه ها در دسترس و قابل استفاده خواهد بود ( صرفنظر از محلی که داده ها از آنجا سرچشمه می گيرند ) .

  • کلاس های NET Data Provider .  کلاس های فوق ، مختص يک منبع داده خاص می باشند. بنابراين NET Data Providers . ،  می بايست برای يک منبع داده ئی خاص نوشته گردد و صرفا" با همان منبع داده ، کار نمايد . کلاس های فوق، قابليت اتصال به يک منبع داده ،بازيابی از منبع داده و بهنگام سازی داده های موجود در يک منبع داده را فراهم می نمايند .

مدل اشياء ADO.NET ،  شامل کلاس های زير است :

  • SQL Server .NET Data Provider

  • OLE DB .NET Data Provider

  • other .NET Data Providers

استفاده از کلاس های ADO.NET در مدل متصل
NET Data Provider . ،  کلاس های مورد نياز ADO.NET را بمنظور استفاده در سناريوی متصل (Connected) ارائه می نمايد. NET data Provider.  ها ،  بگونه ای طراحی شده که کم حجم و حداقل لايه بين کد مربوطه  و منبع داده ايجاد و بدين ترتيب کارائی سيستم افزايش خواهد يافت . فريمورک دات نت دارای دو Provider است :

  • SQL Server .NET ، امکان دستيابی بهينه به بانک های اطلاعاتی SQL server 2000  و SQL Server 7 را فراهم می نمايد .  بمنظور استفاده از Provider فوق، می بايست از Namespace با نام System.Data.sqlclient در برنامه مورد نظر استفاده گردد . استفاده از Provider فوق در مقايسه با OLE  DB.NET دارای کارائی بمراتب بيشتری است (چون  از طريق يک OLE DB و يا ODBC عبور داده نمی شود) .

  • OLE DB.NET ،  امکان دستيابی به SQL Server 6.5  و  ساير بانک های اطلاعاتی نظير Oracle , Sybase , DB2/400 و Access را فراهم می نمايد . بمنظور استفاده از Provider فوق، می بايست از Namespace با نام System.Data.OleDb در برنامه مورد نظر استفاده گردد .

کلاس های هر يک از Data Provider ها،  از مدل رايج اشياء ADO.NET تبعيت می نمايند . در SQL Server .NET Data Provider ،  اسامی کلاس ها با پيشوند sql شروع می شود . مثلا" کلاس مربوطه به Connection دارای نام sqlConnection است .  در OLE DB.NET Provider ، اسامی کلاس ها با پيشوند OleDb شروع می گردد . مثلا" کلاس Connection دارای نام OleDbConnection است .
در آينده NET Date Provider . ،  بيشتر و با پيشوندهای ديگری ايجاد خواهند شد .
 در فهرست زير پيشوندهای متفاوت بصورت  Xxx  نشان داده شده اند :

  • XxxConnection  ، باعث ايجاد يک اتصال( ارتباط)  به منبع داده می شود . مثلا" کلاس sqlConnection ، باعث ايجاد يک اتصال به منبع داده ئی از نوع SQL Server می گردد .

  • XxxCommand ،   باعث اجرای يک دستور از منبع داده می گردد . مثلا" کلاس sqlCommand می تواند باعث اجرای يک Stored Procedure و يا يک عبارت SQL در منبع داده ئی از نوع SQL Server می گردد . 

  • XxxDataReader ، کلاس فوق، باعث خواندن مجموعه ای داده  از يک منبع داده ، بصورت فقط خواندنی و صرفا" بسمت جلو می گردد .مثلا" کلاس  sqlDataReader ، باعث خواندن سطرهائی از جداول يک منبع داده ئی از نوع SQL Server می گردد . کلاس فوق،  توسط متد ExecuteReader مربوط به کلاس XxxCommand بعنوان نتيجه اجرای يک عبارت SELECT SQL برگردانده می گردد .

مثال : کلاس XxxDataReader ، امکان دستيابی فقط خواندنی و صرفا" بسمت جلو در ارتباط با داده های موجود در يک منبع داده را فراهم می نمايد. مثلا" برای استفاده از sqlDataReader برای خواندن داده از يک بانک اطلاعاتی SQL server ، می بايست مراحل زير را انجام داد.

  • يک شی sqlConnection ، بمنظور اتصال ( ارتباط) به بانک اطلاعاتی SQL Server تعريف نمائيد.

  • يک شی sqlCommand تعريف که شامل عبارت SQL SELECT برای پرس و جو(Query)  در ارتباط با بانک اطلاعاتی باشد .

  • يک شی sqlDataReader تعريف نمائيد.

  • فعال نمودن (Open) شی sqlConnection

  • اجرای شی sqlCommand با استفاده از متد ExecuteReader و نسبت دهی نتايج به شی sqlDataReader

  • استفاده از متد Read مربوط به شی sqlDataReader برای حرکت بسمت جلو  در طول داده ها و پردازش سطرهای مربوطه

  • بستن sqlDataReader

  • بستن sqlConnection

استفاده از ADO.NET در مدل غيرمتصل
کلاس های ADO.NET که در مدل غير متصل استفاده می گردد توسط NET Data Providers . ، ارائه  و در Namespace با نام System.Data موجود می باشند. فهرست زير کلاس هائی استفاده شده در مدل غير متصل ، را نشان می دهد :

  • XxxDataAdapter ، با استفاده از کلاس های Connection  , DataReader و Coomand می توان يک DataSet  را مديريت نمود.مثلا" کلاس sqlDataAdapter ، قادر به مديريت بين يک Dataset و يک بانک اطلاعاتی SQL Server 7 است .

  • XxxConnection  ،  ارتباطی با يک منبع داده ئی خاص را ايجاد ( برقرار) می نمايد . مثلا" کلاس sqlConnection ،باعث برقراری يک اتصال با منبع داده ئی از نوع SQL Server می گردد .

  • XxxCommand ،  قادر به اجرای Stored Procedure و يا عبارات SQL در يک منبع داده ئی از نوع SQL Server می باشد . 

  • XxxDataReader  ، کلاس فوق، باعث خواندن مجموعه ای داده  از يک منبع داده ، بصورت فقط خواندنی و صرفا" بسمت جلو می گردد .مثلا" کلاس  sqlDataReader ، باعث خواندن سطرهائی از جداول يک منبع داده ئی از نوع SQL Server می گردد . کلاس فوق،  توسط متد ExecuteReader مربوط به کلاس XxxCommand بعنوان نتيجه اجرای يک عبارت SELECT SQL برگردانده می گردد .

مثال : مراحل زير نحوه کار در يک محيط غير متصل را نشان می دهد :

  • باز نمودن يک اتصال

  • پر نمودن DataSet با استفاده از متد Fill مربوط به DataAdapter

  • بستن اتصال

  • پردازش DataSet ( مرتب سازی ، فيلترسازی،  خلاصه سازی،  نمايش داده ها در کنترل های ويندوز و وب ) . DataSet بصورت خودکار هرگونه تغييرات را رديابی و ثبت خواهد کرد .

  • باز نمودن اتصال .، می توان از همان اتصالی که قبلا" ايجاد شده بود استفاده گردد .

  • بهنگام سازی منبع داده با در نظر گرفتن تغييراتی که در DataSet اعمال شده است ( از طريق متد Upadate مربوط به DataAdapter  ).

  • بستن اتصال


نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:








ارسال توسط هادی احمدی

آرشیو مطالب
پيوند هاي روزانه
امکانات جانبی

آمار وب سایت:  

بازدید امروز : 435
بازدید دیروز : 99
بازدید هفته : 537
بازدید ماه : 933
بازدید کل : 204921
تعداد مطالب : 736
تعداد نظرات : 23
تعداد آنلاین : 1

Google

در اين وبلاگ
در كل اينترنت
 <-PostTitle-> <-PostContent-> 1 <-PostLink->