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