براي استفاده مفيدتر از اين مقاله، توصيه مي گردد، مقاله معماري برنامه هاي مبتني بر داده را در ابتدا مطالعه نمائيد . 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 ).
• بستن اتصال