پروژه دوره کاردانی
در رشته:کامپیوتر گرایش: نرم افزار
پیشگفتار
سپاس یزدان یکتا را که توفیقی در جهت کسب علم و دانش پیدا کردم ، تا بتوانم دیدگاه تازه ای درانجام پروژه های دانشجویی ارائه دهم.
دگرگونی چندی و چونی این دیدگاه در همسنگی با پروژه های پیشین ارائه شده ،چنان است که شاید بتوان گفت :این پروژه تازه ای است.
این پروژه در واقع یک پژوهش است در زمینه برنامه نویسی ،چرا که باید همه آنچه را که راجع به اشیاء و برنامه نویسی شئ گرا لازم است آموخته شود . در اینجا بخاطر اهمیت موضوع و به اتکای مروری چند روی برنامه نویسی به زبانهای مختلف توسط اینجانب ،در پروژه های دانشگاهی به تجربیاتی دست پیدا کرده ام ،لذا پیشنهادهایی را مطرح می کنم:
1_معرفی کردن چند Refrence مختلف توسط استاد و مطالعه آنها توسط دانشجویان و از اساتید خواهشمندم که منابعی را که بیشتر مربوط به پایگاه داده است معرفی کنند ؛زیرا اشیاء زبانهای برنامه نویسی بطور تجربی هم یاد گرفته خواهند شد.
2_در برنامه نویسی شئ گرا برای ایجاد ارتباط بین برنامه های ویژوا ل و پایگاه داده حتی الامکان ازایجاد آبجکت ها یADO.NET توسط برنامه نویسی خودداری کنید تا مهارت لازم را بدست آورید.
3_در تمام پروژه های دانشگاهی باید تمام مطالب مرتبط خوانده شود.
4_منظور کردن درس"پایگاه داده ها "قبل از هرگونه پروژه های برنامه نویسی مگر اینکه کاملاً ساده بوده و نیازی به بانک اطلاعاتی نداشته باشد .
5_متمایز کردن انواع پایگاه داده ها از یکدیگر و بیان تفاوتهای آن در معرفی یک نوع خاص از پایگاه دریک زبان برنامه نویسی .
6_منظور کردن درس "آموزش ADO.NET"برای تمام زبانهای .NET و پروژه ها یی که با این قبیل برنامه ها خواهد بود .
دو درس اخیر ، گذشته ازاینکه هر یک به تنهایی از اهمیت ویژه ای برخوردارند ،از جهاتی با درس برنامه نویسی شئ گرا همسنخی و همسایگی دارند .
امید اینکه این پیشنهادها به طرز درخور،مورد توجه قرار گیرد ...
اما درمورد این ویراست :
بخش اول :ADO.NET (به دلیل اینکه اصلاً در دانشگاه و واحدهای گذرانده چنین درسی مطرح نشده توضیحات بیشتری ارائه شده است.)
بخش دوم: سیستم های مدیریت بانک اطلاعاتی
بخش سوم : پروژه برنامه نویسی
محتوای بخش اول به تمامی مطالبی که لازم است پرداخته شده و در همه فصلهای این بخش ،بسیاری از مطالب حذف شده است .
بخش اول
ADO.NET
فصل اول
شروع کار با ADO.NET
آنچه در این فصل ارائه خواهد شد:
* شناختن آبجکت های اصلی تشکیل دهنده Microsoft ADO.NET
* ایجاد آبجکت های connection و DataAdapter با استفاده از ویزارد DataAdapter Configuration
* ایجاد اتوماتیک یک dataset
* مرتبط کردن خاصیت های کنترلی به یک DataSet
* بارگذاری داده ها در DataSet در زمان اجرا
ابتدا:
باید بدانید که NET Data Provider . چیست؟
بمنظوراتصال به یک منبع داده ، می بایست در ابتدا یک Net Data Provider . ، انتخاب گردد . Data Provider ، کلاس های لازم بمنظور اتصال به یک منبع داده ، خواندن اطلاعات ، ویرایش ، بهنگام سازی و انجام عملیات متفاوت بر روی داده ها را ارائه می نماید . در این مقاله به تشریح انواع Data Provider پرداخته و با نحوه انتخاب مناسب آنان بمنظور استفاده در برنامه ها ، آشنا خواهیم شد .
NET Data Provider. ، یک Component کلیدی ارائه شده بهمراه معماری ADO.NET بوده که امکان ارتباط بین یک منبع داده و یک Component ، یک سرویس وب XML و یا یک برنامه را فراهم می نماید. یک NET Data Provider .، امکان اتصال به منبع داده ، بازیابی داده ها ، انجام عملیات بر روی داده ها و بهنگام سازی منبع داده را فراهم می نماید. بهمراه فریمورک دات نت ، Provider های زیر ارائه شده است :
OLE DB .NET Data Provider
SQL Server .NET Data Provider
در آینده برای سایر منابع داده ، NET Data Provider . مربوطه ایجاد و در دسترس عموم برنامه نویسان قرار خواهد گرفت. هر Provider ، مسئولیت پیاده سازی کلاس های عمومی ADO.NET را برعهده خواهد داشت . دستاورد رویکرد فوق ، ارتباط با منابع داده متفاوت با استفاده از یک روش یکسان از طریق محیط های برنامه نویسی خواهد بود .
کلاس های NET Data Provider .
ADO.NET ، از NET Data Provider. ، بمنظور ارتباط به منبع داده ، بازیابی ، عملیات برروی داده ها و بهنگام سازی منبع داده استفاده می نماید . هر Provider ، بگونه ای طراحی می گردد که دارای حجم اندکی بوده و یک لایه حداقل بین کد های نوشته شده و منبع داده را ایجاد نمایند . ( افزایش کارائی بدون قربانی نمودن پتانسیل ها).Net Framework دارای دو Data Provider است:
SQL Server .NET
OLE DB .NET
مقدمه ای برADO.NET:
همان طور که می دانید ،بانک اطلاعاتی همان فایل های کامپیوتری است که برنامه کاربردی با استفاده از سیستم مدیریت بانک اطلاعاتی آن را پردازش می کند.اما برای اینکه برنامه کاربردی با سیستم مدیریت بانک اطلاعاتی ارتباط برقرار کند،نیاز به یک واسط [1] نرم افزاری دارد. یکی از این واسط های نرم افزاری ADO.NET است. به عبارت دیگر ،در زبان ویژوال بیسیک نت برای برقراری ارتباط با سیستم مدیریت بانک اطلاعاتی از فناوری ADO.NET استفاده می شود.توجه داشته باشید که فناوری ADO کاملاً با فناوری ADO.NET متفاوت است، زیرا الگوی کاملاً جدیدی برای دستیابی به بانک اطلاعاتی است.
ADO.NET امکان ارتباط با بانک اطلاعاتی رابطه ای و سایر منابع داده ها را فراهم می کند .به عبارت دیگر ، ADO.NET فناوری است که برنامه های کاربردی ویژوال بیسیک نت ازآن برای ارتباط با بانک اطلاعاتی استفاده می کند.به این ترتیب این برنامه ها می توانند رکورد هایی را به بانک اطلاعاتی اضافه کنند،رکوردهایی را حذف یا ویرایش کنند. ADO.NET برای برنامه های کاربردی توزیعی [2] (مثل برنامه های کاربردی وب) مفید است.
یکی از ویژگی های مهم ADO.NET این است که بی اتصال[3] است.این ویژگی تفاوت اساسی آن با ADO است. در ADO ،برنامه های کاربردی به بانک اطلاعاتی وصل می شوند،یک Record Set ایجاد می کنند،و از اطلاعات آن برای پر کردن Data Grid یا محاسبات دیگر استفاده می کنند،سپس Record Set ، را ازبین برده اتصال را قطع می کنند.در حالی که اتصال باز است(اتصال با بانک اطلاعاتی برقرار است)،اتصال "زنده ای " با بانک اطلاعاتی وجود دارد که می توانید آن را فوراً به هنگام سازی کنید و گاهی تغییرات حاصل ازکاربران دیگران را بلافاصله مشاهده کنید. در یک برنامه نه چندان خوب ،اتصال بانک اطلاعاتی ممکن است در حین انجام کارهای دیگر ،باز نگهداشته شود . معنایش این است که منابع مهمی در حال استفاده اند و در نتیجه از تعداد کاربرانی که می توانند به بانک اطلاعاتی دستیابی داشته باشند وازبرنامه های کاربردی ویژوال بیسیک نت استفاده کنند،کاسته می شود.
درADO.NET از استدلال کاملاً متفاوتی استفاده می کند. وقتی درADO.NET با بانک اطلاعاتی ارتباط برقرار می کنید ، اطلاعاتی که از بانک اطلاعاتی دریافت می کنید دریک Dataset قرار می گیرد اگر اطلاعات موجود در Dataset را تغییر دهید ، اطلاعات موجود در جدول متناظر با بانک اطلاعاتی تغییر نمی کند. معنایش این است که بدون نگرانی می توانید مقادیر موجود در Dataset را دستکاری کنید ،زیرا از اتصال زنده استفاده نمی شود .در صورت نیاز ، Dataset می تواند با منبع داده اصلی اتصال برقرار کند و تمام تغییرات را اعمال نماید.
ADO.NET مثل دیگر اجزای .NET Framework از مجموعه ای از آبجت ها تشکیل شده است که برای ارائه دادن عملکرد مورد نیاز،با هم ارتباط برقرار می کنند.متأسفانه،این امر می تواند یادگیری مدل آبجکت را دلسرد کننده کند_شما احساس می کنید که نیاز دارید همه ی آنها را یادبگیرید قبل از آنکه بتوانید یکی از آنها رادرک کنید. (شکل زیر توضیحی بر اجزای Framework است.)
راه حل این مشکل این است که با ایجاد یک چهار چوب مفهومی،کار را شروع کنیم.به عبارت دیگر ،قبل از اینکه سعی کنید جزئیات کارکرد هر آبجکت را یاد بگیرید ،باید درک کلی از اینکه هر آبجکت چهکاری انجام می دهد و چگونگی ارتباط آبجکت ها را بدست آورید. این همان چیزی است که ما در این فصل انجام می دهیم.ما با نگاه به آبجکت های اصلی ADO.NET و اینکه چگونه این آبجکت ها ،با هم کار می کنند تا داده هارا از یک منبع داده فیزیکی بگیرند، به کاربر بدهند و دوباره به منبع داده بدهند، کارمان را شروع می کنیم. بعد، یک مجموعه از آبجکت ها را می سازیم و آنها را به یک data form ساده، ارتباط می دهیم.
همه چیز در مورد پایه های ارتباط :
در قسمت های بعدی این فصل ،هر آبجکت را به تشریح توضیح خواهیم داد.
هر کجا که لازم باشد از یک متد یا خاصیت properties) ) استفاده کنیم که تاکنون مورد بررسی قرار نداده _ایم در انتهای پاراگراف برای راهنمایی خوانندگان استفاده می کنم.
استاندارد اتصال پایگاه داده باز:
ODBC = Open DataBase Connectivity
این استاندارد راهی برای ارتباط برنامه کاربردی با سرویس دهنده پایگاه داده فراهم می کند.ODBC واسط برنامه کاربردی API [4] را تعریف می کند که برنامه کاربردی با استفاده از آن می تواند پایگاه داده را باز کند،تقاضاها یا بهنگام سازی ها را اجرا نماید،و نتایج را دریافت کند.
کاربردهایی مثل واسط های گرافیکی کاربر ، بسته های آماری و صفحات گسترده با استفاده از ODBC API می توانند به هر سرویس دهنده ی پایگاه داده ای که از ODBC پشتیبانی می کند،متصل شوند.
هر کدام از سیستم ها ی پایگاه داده که از ODBC پشتیبانی می کند،کتابخانه ای دارند که باید با برنامه مشتری پیوند داده شود. وقتی برنامه مشتری ODBC API را فراخوانی می کند ،کد موجود در کتابخانه با سرویس دهنده ارتباط برقرار می کند تا عمل درخواستی را انجام دهد و نتایج را دریافت نماید.
استاندارد های SQL ،واسط سطح تماس[5] را تعریف می کند که مشابه با واسط ODBC است. APIهای ADO و ADO.NET جایگزین هایی برای ODBC هستند که برای زبانهایی مثل ویژوال بیسیک وC# طراحی شدند.
مدل آبجکتی ADO.NET
شکل زیر ،نمای ساده ای از آبجکت های اصلی مدل آبجکتی ADO.NET را نشان می دهد. البته،واقعیت کتابخانه کلاس ها، بسیار پیچیده تر است،ولی بعدأ در مورد جزئیات توضیح داده خواهد شد.حالا، فقط درک اینکه آبجکت های اولیه و اصلی کدامند و چگونه باهم ارتباط برقرار می کنند ، کافی است.
کلاسهای ADO.NET به دو عنصر (جزء) تقسیم شده اند :data Provider ها (که بعضی اوقات
Managed Provider نامیده می شود)و ارتباط با یک منبع داده فیزیکی را اداره می کنند و dataset که نشان دهنده داده های واقعی است. هر کدام از این عناصر (component) ،می توانند با مصرف کنندگان داده (data consumers) مثل web formها و winform ها ارتباط برقرار می کنند .
The ADO.NET Object Model
Data Provider ها:
عناصر data Provider،مخصوص یک منبع داده هستند. .NET Framework ،دارای دو
data provider است:
یک data provider (ارائه کننده)عمومی که می توانند با هر منبع داده OLE DB ارتباط برقرار کند و یک SQL Server Provider که برای Microsoft SQL Server نسخه های 7 و بعد از آن ،بهینه شده است.انتظار می رود که Data Provider هایی برای پایگاه داده های دیگر، مثل Oracle،DB2 نیز موجود می باشند یا شما می توانید خودتان آنها را بنویسید .
دو Data Provider موجود در .NET Framework دارای آبجکت های مشابهی هستند ،اگر چه اسم و برخی از خصوصیات و متدها،متفاوتند.مثلأ آبجکت های SQL Server Provider با sql شروع می شوند (برای مثال sqlconnection )،در حالی که آبجکت های OLEDB با oledb شروع می شوند.
(برای مثال oledbconnection ).
آبجکت Connection :این آبحکت نماینده اتصال فیزیکی به یک منبع داده است و خصوصیات آن،Data Provider (در مورد OLEDB Data Provider)،منبع داده و پایگاهی که به آن وصل خواهد شد و رشته ای که در طی اتصال از آن استفاده می کند،را تعیین می کنند. متد های آن نیز ، ساده اند:می توانید connection را باز کنید و ببینید،پایگاه داده را تغییر دهید و تراکنش ها را مدیریت کنید .
آبجکت command :این آبجکت نماینده یک دستور SQL یا یک رویه ذخیره شده (stored procedure) است که باید در منبع داده، اجرا شود. آبجکت های command ، می توانند ایجاد شوند و به صورت مستقل در یک آبجکت connection اجرا شوند و توسط آبجکت های dataAdapter ، برای مدیریت ارتباطات از DataSet به منبع داده ، مورد استفاده قرار می گیرند. آبجکتهای command از دستورات SQL و روالهای ذخیره شده پشتیبانی می کنند که می توانند یک مقدار ، یک یا چند رکورد را برگردانند و یا اصلاً مقداری برنگردانند.
آبجکت DataReader :این آبجکت ،یک آبجکت سریع و با سربار کم (low_overhead) برای بدست آوردن یک جریان فقط فرستادنی (forward_only) و فقط خواندنی از داده های یک منبع داده می باشد. این آبجکت هانمی توانندمستقیماً با کد ایجاد شوند و فقط با فراخوانی متد ExacuteReader آبجکت Command ایجاد می شوند.
آبجکت DataAdapter:این آبجکت از نظر کارکرد ،پیچیده ترین آبجکت در یک Data Provider است و پل بین یک Connection و یک DataSet است .DataAdapter دارای چهار آبجکت Command استCommand: Updateو Command select و Command Insert و Command Delete .DataAdapter از Command select برای پر کردن یک DataSet استفاده می کند و سه آبجکت دیگر برای انتقال تغییرات مورد نیاز به منبع داده ، استفاده می کند.
(ADO) آبجکت های Microsoft Activex Data
از نظر کارکرد، آبجکت های connection ،و Command تقریباً معادل همتاهای ADO خود هستند (تفاوت های آنها در عدم
پشتیبانی از مکان نماهای (cursor) سمت سروراست)، در حالی که DataReader ،مثل یک مکان نمای firehose ،عمل می کند . DataAdapterو DataSet هچ معادلی در ADO ندارند.
اشیاء و متدهای ADO.NET :
ADO.NET دارای چند شیء مهم است.این اشیاء را می توان به دو دسته تقسیم کرد:
آنهایی که برای نگهداری و مدیریت بر داده ها استفاده می شوند(مثل DataSet، DataTable ، DataRow ،DataRelation )
آنهایی که برای اتصال با منبع داده [6] به کارمی روند (مثل DataReader،Connection ، Command ). توجه کنید که منظور از منبع داده ، جایی است که اطلاعات در آن نگهداری می شوند،به عنوان مثال ،بانک اطلاعاتی یک منبع داده است.
عناصر دسته دوم ADO.NET به دو گروه تقسیم می شوند :
گروه مربوط به نسخه استاندارد تأمین کننده [7] OLEDB [8] (مثل اکسس).
گروه مربوط به بانک اطلاعاتی SQL server منجر به افزایش کارایی می شوند
هر دو گروه تقریباً مثل هم عمل می کنند .تنها تفاوت این است که کلاسهایی که برای SQL server طراحی می شوند،از لایه OleDb عبور می کنند،و کارایی بهتری را ارائه می دهند. جدول1_1 مهمترین اشیاء و عملیات ADO.NET را نشان می دهد.در ادامه به شرح آن خواهیم پرداخت.
اولاً توجه کنید که اشیایی که با sql شروع می شوند،سرعت بالاتری دارند وفقط با SQL server میکروسافت کار می کنند .اشیاء OleDb با اکسس،اوراکل،وسایر بانکهای اطلاعاتی کار می کنند که برای آنها گرداننده های OleDb وجود دارد.یادآوری می شود که چون اشیاء OleDb نسبت به اشیاء sql از لایه های نرم افزاری بیشتری استفاده می کنند،سرعت اشیاء sql بیشتر است