PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تفاوت ADO و ADO.Net



TAHA
09-29-2009, 06:48 AM
هنگانی که برنامه های Client/Server می نویسید، Component هایی که یک ارتباط را با Database ایجاد می کنند و آن را تا زمانی که برنامه در حال اجراست بصورت Open نگهداری می کنند دارای معایب زیر می باشند :
1) باز نگهداشتن یک ارتباط با Database مقدار قابل توجهی از منابع سیستم را مصرف می کند و با توجه به اینکه در بیشتر مواقع Database می تواند مقدار کمی از Connection ها را نگهداری کند، این عمل موجب کاهش کارآیی برنامه ها می گردد.
2) همچنین در برنامه هایی که نیاز به یک ازتباط Open با Database دارند، افزایش تغداد برنامه های در حال اجرا بسیار سخت می باشد. یک برنامه با این وضعیت ممکن است تا چهار کاربر را پشتیبانی کند اما برای مثلاٌ صد کاربر چطور؟
همجنین باید توجه کرد که بر روی WEB در مدت زمان کوتاهی تعداد کاربران ممکن است بسیار افزایش پیدا کند.
3) در برنامه های ASP.NET کلیه قسمت ها از هم مجزا می باشند. به این صورت که Browser یک Page را از server در خواست می کند و زمانی که Server پردازش و انتقال Page را کامل کرد، ارتباط خود را با Browser قطع می کند (تا زمانی که درخواست بعدی ارسال شود). با توجه به این معماری، نگهداری یک ارتباط Open با Database لازم و ضروری نمی باشد. زیرا روشی وجود ندارد که بتوان تشخیص داد که آیا برنامه Client بعداٌ به داده ای نیاز پیدا خواهد کرد یا خیر.
4) با استفاده از مدل always-connected انتقال اطلاعات بین برنامه ها بسیار سخت و حتی غیرممکن می باشد. زیرا اگر دو Component بخواهند یک سری Data را به اشتراک بگذارند باید هر کدام یک ارتباط برای خود ایجاد کنند.

به این منظور معماری ADO.NET بگونه ای طراحی شده است که دارای کمترین Connection فعال باشد. در معماری ADO.NET یک برنامه تنها زمانی که نیاز به خواندن و یا نوشتن اطلاعات داشته باشد، یک Connection را ایجاد می کند و پس از انجام آن، Connection را از بین می برد. این کار باعث می شود که Database نیاز به نگهداری تعداد زیادی Connection (که در بیشتر مواقع بصورت Idle می باشند) نداشته باشد و در نتیجه بتواند تعداد بسیار بیشتری از کاربران را سرویس دهی کند.

استفاده از Data Command برای کار با Database
به منظور انجام یک عملیات در Database شما یک دستور SQL یا یک Stored procedure را اجرا می کنید. در واقع از دستورات SQL و Stored procedure ها برای نوشتن و خواندن اطلاعات و یا انجام توابعی مثل میانگین گیری استفاده می کنید. همچنین از آنها برای ایجاد و تغییر Table ها و Field ها استفاده می کنید. مثلاٌ زمانی که نیاز به خواندن اطلاعات از Database دارید، مراحل زیر را انجام می دهید:
1) باز کردن یک Connection
2) فراخوانی روال Execute یک Command
3) بستن Connection

همانطور که مشاهده می کنید یک Connection تنها در طول زمان اجرای دستور SQL و یا Stored procedure باز می باشد.
زمانی که روال Execute یک Command را اجرا می کند، مقداری بازگردانده می شود که می تواند تعداد رکوردهای Update شده و یا شماره Error اتفاق افتاده و یا تعدادی Record که توسط دستور Select بدست آمده، باشند. اگر حاصل این عملیات تعدادی Record باشد که بوسیله دستور Select واکشی شده اند، شما می توانید با استفاده از Data Reader (که یک روش بسیار سریع را جهت خواندن داده ها آن هم بصورت فقط خواندنی و حرکت تنها به جلو ارائه می دهد) اطلاعات را واکشی کنید.

توجه
سعی کنید که تا جای ممکن بجای اجرای یک دستور SQL از Stored Procedure ها استفاده کنید. زیرا موجب می شود که کاربران نتوانند با استفاده از دستورات SQL به Database صدمه وارد کنند.


اگر نیاز به انجام چندین عمل باشد ، مثلاٌ خواندن تعدادی رکورد و تغییر آنها و سپس اعمال آنها به Database باید بصورت زیر عمل کنید :
1) باز کردن یک Connection
2) خواندن رکوردهای مورد نظر
3) بستن Connection
4) اعمال تغییرات به رکوردها
5) باز کردن یک Connection
6) اعمال رکوردهای تغییر کرده به Database
7) بستن Connection

استفاده از Dataset برای Cache کردن داده ها
در بیشتر مواقع، کار با Data ها به این صورت انجام می شود که تعدادی رکورد از Database خوانده می شوند، بر روی آنها عملیات هایی صورت می گیرد، نمایش داده می شوند و یا به Component دیگری انتقال داده می شوند. با توجه به اینکه عملیات فوق در بیشتر مواقع بر روی چندین رکورد صورت می گیرد، درست نیست که برنامه برای خواندن هر رکورد به سراغ Database برورد. بنابراین بهتر است که برنامه اطلاعات را بصورت Cache شده برای خود بصورت خصوصی نگهداری کند.
در واقع عمل یک Dataset نیز همین می باشد. Dataset یک Cache است که برای نگهداری اطلاعات واکشی شده از منبع داده استفاده می شود. یک Dataset می تواند شامل یک یا چند Table باشد و همچنین می تواند ارتباط بین انها را نگهداری کند.
در زمانی که شما از Dataset استفاده می کنید، می توانید ارتباط با Database را قطع کنید و در نتیجه باعث شوید که Database بتواند به کارهای دیگر خود بپردازد.
همچنین به منظور اعمال تغییرات ایجاد شده در Dataset می توانید روال Update آن را فراخوانی کنید تا اطلاعات تعییر داده شده به Database اعمال شوند.
البته باید توجه کنید که Dataset تنها یک وسیله برای نگهداری اطلاعات می باشد و برای واکشی اطلاعات از Database باید از یک Data Adaptor استفاده کنید. یک Data Adaptor در واقع شامل تعدادی دستور برای انجام عملیات بر روی یک Table می باشد.(بصورت نرمال یک Data Adaptor شامل چهار دستور است که یکی برای Select ، یکی برای Insert ، یکی برای Update و یکی برای Delete می باشند.)
با استفاده از روال Fill یک Data Adaptor می توان اطلاعات موجود در یک Table را به درون یک dataset انتفال داد. یعنی زمانی که شما روال Fill یک Data Adaptor را فراخوانی می کنید، اطلاعات از Table موجود در Database با توجه به دستور Select موجود در Data Adaptor (مثل Select * from parts ) واکشی و به درون dataset انتقال داده می شوند تا بصورت cache نگهداری شوند.
یکی از مزایای استفاده از Dataset این است که شما می توانید آن را بین Component های مختلف انتقال دهید و این کار در حالی انجام می شود که دیگر Query ای در Database اجرا نمی گردد.

عدم وابستگی Dataset ها به منابع داده ای
اگرچه Dataset ها برای cache کردن داده های واکشی شده از Database استفاده می شوند، لیکن هیچ گونه ارتباطی بین آنها و Database وجود ندارد و در نتیجه آنها می توانند Table های مختلفی از Database های مختلف را در خود نگهداری کنند.

ADO.NET و XML
با توجه به اینکه اطلاعات باید از منبع داده ای خوانده و در Dataset نگهداری و از آن به Component های دیگر ارسال شوند، در ADO.NET برای این انتقالات از فرمت XML استفاده شده است. همچنین اگر نیاز باشد که اطلاعات در یک فایل نگهداری شوند، آنها با فرمت XML نگهداری خواهند شد و اگر شما یک فایل XML داشته باشید می توانید از آن به عنوان یک منبع داده ای استفاده کنید و برای آن یک Dataset ایجاد نمایید.
در واقع در ADO.NET ، XML فرمت پایه اطلاعات قرار داده شده است. API های ADO.NET بصورت خودکار یک فایل XML را ایجاد می کنند تا بتوان داده ها را به Component های دیگر انتقال داد. همچنین در مقصد می توان با استفاده از API های ADO.NET برای خواندن اطلاعات فایل XML استفاده کرد. (البته توجه کنید که داده ها در Dataset بصورت XML نگهداری نمی شوند و در عوض با یک فرمت بسیار کارآمدتر نگهداری می شوند).


استفاده از XML به عنوان Protocol داده ای دارای مزایای زیر می باشد:
1) XML یک فرمت استاندارد است و در نتیجه برنامه شما می تواند اطلاعات خود را با هر Component در هر برنامه ای رد و بدل کند.
2) XML فرمت متنی دارد. در نتیجه به شما اجازه می دهد که آن را از طریق هر protocol ای (مثلاٌ HTTP )ارسال کنید. (بدون درگیری با firewall ها).

توجه کنید که در بیشتر مواقع، شما برای کار با ADO.NET نیاز به فراگیری XML ندارید. زیرا ADO.NET بصورت خودکار عمل تبدیل از Dataset به XML و از XML به درون Dataset را انجام می دهد.


طرح یک برنامه بر پایه ADO.NET بصورت شکل زیر می باشد.