سلام با آموزش برنامه نویسی سی شارپ قسمت نهم در خدمت شما عزیزان هستیم, در قسمت قبلی با Abstract Class در زبان C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.
لينك قسمت اول : آموزش #C
در تقریبا تمامی برنامه های امروزی لازم است تا حجم متعارفی از داده ها (کم یا زیاد) را مدیریت کرد. این مدیریت شامل خواندن، افزودن، ویرایش و یا حذف داده می تواند باشد. برای این منظور در بستر دات نت کتابخانه ای غنی به نام ADO.NET طراحی گردیده که به ما در پیاده سازی فرآیندهای مربوط به این امر کمک زیادی خواهد کرد.
مقدمه ای بر ADO.NET
این درس مقدمه ایست بر ADO.NET. این بخش مفاهیم اولیه ی ADO.NET و اهدافی را که در بخش های بعدی باید فرا بگیرید، معرفی می نماید. اهداف این درس ذیلا عنوان شده اند:
مقدمه
مجموعه ADO.NET یک مجموعه ی شی گرا (Object-Oriented) از کتابخانه هایی است که به شما اجازه می دهند با Data Source (منبع داده) در ارتباط باشید. به طور کلی Data Source یک پایگاه داده (database) می باشد، اما در عین حال می تواند یک فایل متنی، یک صفحه اکسل، و یا یک فایل XML نیز باشد. به طور پیش فرض ما در این درس به ADO.NET به عنوان راهی برای ارتباط با پایگاه داده نگاه خواهیم کرد.
انواع مختلفی از پایگاه داده در دسترس می باشند. از بین آنها می توان به SQL Server، Microsoft Access، Oracle، Borland Interbase، و IBM DB2 اشاره کرد. در راستای پیشبرد اهداف این درس، در تمامی مثال ها از SQL Server استفاده می شود.
مفهوم MSDE2000 در واقع نسخه ی کوتاه شده ی SQL Server می باشد. بنابراین، هرآنچه که شما در این مبحث می آموزید و نیز تمامی کدها بوسیله SQL Server کار می کنند. این درس منحصرا برای ADO.NET طراحی شده است و مثال های موجود در این بخش از پایگاه داده Northwind استفاده خواهند نمود. MSDE بخشی ازServer SQL نیست اما یکی از Data Source هایی است که از طریق ADO.NET می توانید با آن در تماس باشید.
میدانیم که ADO.NET این امکان را برای ما فراهم می آورد که با انواع مختلفی از پایگاه داده ها و Data Source ها در ارتباط باشیم. با این وجود، مجموعه ی مقادیر واحدی از کلاس هایی که به شما اجازه دهند این کار را به صورت کلی انجام دهید، وجود ندارد. از آنجایی که Data Source های مختلف پروتکل های متفاوتی را ارایه می دهند، به روشی نیاز داریم که از طریق استفاده از پروتکلِ صحیح با data source ها ارتباط برقرار نماییم. برخی از Data Source های قدیمی از پروتکل ODBC استفاده می کنند، برخی از Data Source های جدیدتر از پروتکل OLeDb بهره می گیرند، و هر روز Data Source های بیشتری به وجود می آیند که به شما اجازه می دهند مستقیما از طریقِ کتابخانه های کلاس .NET ADO.NET با آنها در تماس باشید.
مجموعه ADO.NET یک روش نسبتا رایج را برای ارتباط با Data Source ها فراهم می کند. البته چندین مجموعه مختلف از کتابخانه ها برای هر روشی که به منظور برقراری ارتباط با Data Source استفاده می کنید وجود دارد. این برنامه ها Data Provider نامیده می شوند و معمولا بسته به نوع Data Source و یا پروتکلی که از طریقِ آن با Data Source ارتباط برقرار می گردد، نامگذاری می شوند. جدول 1 لیستی از معروف ترین Data Provider ها، API prefix ی که استفاده می نمایند، و نوعِ Data Provider هایی که به شما اجازه می دهند با آنها ارتباط برقرار نمایید را، ارایه نموده است.
ديتا Data Provider های ADO.NET کتابخانه هایی هستند که به یک متد اجازه می دهند که به data source های ویژه یا پروتکل ها وصل شوند. APL ها دارای نشانه های پیشوندی (prefix) می باشند که مشخص می کند از کدام data provider پشتیبانی می کنند.
یک مثال می تواند به شما در درکِ بهتر مفهومِ API Prefix کمک نماید. یکی از اولین اشیای ADO.NET، شی اتصال (Connection Object) است که موجب برقراری ارتباط (Connection) با Data Source می گردد. اگر برای دسترسی به یک Data Source به منظورِ ارایه ی یک واسطِ OleDb، از OleDb Data Provider استفاده شود، می بایست از یک آبجکت اتصال (Connection Object) به نام OleDbConnection بهره گرفت. به همین صورت، نامِ آبجکت اتصال (Connection Object) باید با پیشوندِ Odbc برای آبجکتOdbcConnection بر روی یک Odbc Data Source، و یا به صورتِ پیشوند Sql برای SqlConnection object بر روی یک پایگاه داده SQL Server ، عنوان شوند. از آنجایی که در این مبحث از MSDE (یک ویرایش کوچک SQL Server) استفاده می شود، تمامیِ اشیای API دارای پیشوندِ Sql می باشند، برای مثال SqlConnection.
مجموعه ADO.NET شاملِ اشیای فراوانی است که شما می توانید از آنها برای کار با داده ها استفاده نمایید. این بخش، برخی از اشیای اولیه ی مورد استفاده را معرفی می نماید. در ادامه ی این مبحث، با اشیای ADO.NET بیشتری از نظرِ اینکه چگونه در یک فرآیند مورد استفاده قرار می گیرند آشنا خواهید شد. اشیایی که در زیر عنوان شده اند مواردی هستند که باید آنها را یاد بگیرید.
برای ارتباط با یک پایگاه داده، باید با آن یک اتصال (Connection) برقرار نمود. این اتصال (Connection) به شما کمک می کند که سرور پایگاه داده، نامِ پایگاه داده، username، password، و پارامترهای دیگری که برای برقراری اتصال با پایگاه داده مورد نیاز هستند را تعیین نمایید. آبجکت اتصال (Connection Object) توسط اشیای ویژه اجرای دستورات مرتبط با داده ها روی پایگاه داده (command objects) مورد استفاده قرار می گیرد، بنابراین به آنها اعلان خواهد شد که از کدام database برای اجرای دستور استفاده نمایند.
فرایند ارتباط با یک پایگاه داده بدین معناست که باید عملیاتی را که قرار است اتفاق بیفتد تعیین نمود. این کار توسط شی فرمان (Command Object) صورت میگیرد. از آبجکت فرمان (Command Object) برای ارسال دستوراتِ SQL به پایگاه داده استفاده می شود. آبجکت فرمان (Command Object) برای نشان دادن اینکه به کدام پایگاه داده باید متصل شد، از آبجکت اتصال (Connection Object) استفاده می کند. می توان برای اجرای مستقیم یک دستور، و یا تخصیصِ یک نشانه گذار (Reference)به آبجکت فرمان (Command Object) برای یک SqlDataAdapter، از شی فرمان (Command Object) به تنهایی استفاده نمود. این SqlDataAdapter مجموعه ای از فرمان ها (Command) را که بر روی گروهی از داده ها کار میکنند، نگهداری می نماید.
بسیاری از عملیات های داده ای (Data Operations) نیازمند این هستند که تنها جریانی از داده ها برای خواندن در دسترس باشند. شی DataReader این امکان را فراهم می کند که به نتایجِ یک دستورِ SELECT از یک آبجکت فرمان (Command Object) دست پیدا کنید. به منظور پیشبرد عملیات اجرایی، داده های بازگردانی شده از یک DataReader، جریانی سریع و منحصرا پیشرونده (Forward Only) از داده ها می باشد. این بدان معناست که تنها قادرید داده را به روش ترتیبی از جریان بیرون بکشید. این موضوع از نظر سرعت بهینه و به صرفه است، اما در صورتی که بخواهید داده ها را دستکاری کنید، DataSet آبجکت بهتری برای اجرا خواهد بود.
اشیای DataSet یک نماینده مقیم در حافظه از پایگاه داده می باشند. آنها شامل چندین شی DataTable هستند که درست مانند جداولِ پایگاه داده معمولی، دارای سطر و ستون می باشند. حتی می توان روابط بین جداول را به منظور ایجاد روابط کل به جزء (parent-child)، تعریف نمود. Dataset ها به طور خاص برای کمک به مدیریت داده های مقیم در حافظه و برای پشتیبانی از عملیات داده ای که دیگر در دسترس نیستند (Disconnected Operations) ، طراحی شده اند. DataSet آبجکتی است که بوسیله ی تمامی Data Provider ها استفاده می شود، و به همین دلیل است که فاقدِ هرگونه پیشوند مخصوصِ Data Provider می باشد.
گاهی اوقات داده ای که با آن کار می کنید، داده ای تنها خواندنی (Read Only) است و به ندرت نیاز خواهید داشت که تغییراتی را بر روی منابعِ داده ای مشخص شده، اعمال نمایید. بعضی موقعیت ها همچنین ملزم به ذخیره سازی داده ها در حافظه می باشند تا میزانِ فراخوانی های پایگاه داده را برای داده هایی که تغییر نمی کنند، کاهش دهند. Date Adapter انجام این کارها را با کمک به مدیریت داده ها در حالتِ Disconnected، آسان می کند. Data Adapter به هنگام خواندن داده ها یک DataSet را پر نموده و در زمان بازگشت تغییرات به پایگاه داده، یک دسته ی تکی را می نویسد. Data Adapter حاوی مرجعی برای آبجکت اتصال (Connection Object) بوده و به هنگام خواندن فرمان به پایگاه داده و یا نوشتن به آن، به طور خودکار اتصال را قطع و وصل می کند. بعلاوه، Data Adapter حاویِ نشانگرهای آبجکت فرمان (Command Object) برای دستورهای SELECT، INSERT، UPDATE، و DELETE می باشد. در DataSet، برای هر جدول یک Data Adapter تعریف شده است و این موجب می شود که از تمامی ارتباط ها در پایگاه داده محافظت شود. تمام کاری که باید انجام دهید این است که به Data Adapter بگویید که چه موقع داده ها را از پایگاه داده بارگذاری نموده و چه هنگام دوباره در پایگاه داده ثبت کند.
خلاصه
مجموعه ADO.NET عبارت است از فن آوریِ .NET برای ارتباط با منابع داده ای (Data Source). بسته به نوع پایگاه داده و یا پروتکلی که مورد استفاده قرار می گیرد، Data Provider های مختلفی وجود دارند که امکان ارتباط با Data Source های مختلف را فراهم می آورند. بدون در نظر گرفتنِ نوعِ Data Provider مورد استفاده، از مجموعه ای مشابه از اشیا برای تعامل با یک Data Source استفاده می گردد. SqlConnection Object این امکان را به وجود می آورد که اتصال (Connection) با Data Source مدیریت شود. SqlCommand Objects موجب می شود که ارتباط با Data Source برقرار شده و دستوراتی را برای آن ارسال نمایید. به منظور استفاده از قابلیتِ دسترسیِ خواندنی سریع و منحصرا رو به جلوی داده ها) fast forward-only read access to data)، از SqlDataReader استفاده می گردد. اگر میخواهید با داده های Disconnected کار کنید، از یک DataSet بهره گرفته و با استفاده از SqlDataReader ، عملیات خواندن از Data Sourceو نوشتن به آن را، پیاده سازی نمایید.
پايان قسمت نهم آموزش سي شارپ