3. مطالعه موردی
ما میخواهیم یک برنامه .NET بنویسیم که به کاربر امکان دهد شبیهسازیهایی را برای محاسبه دستمزد مراقبان کودک شاغل در انجمن «Maison de la petite enfance» در یک نهاد محلی اجرا کند. ما به همان اندازه که بر خود کد DotNet برنامه تمرکز میکنیم، بر سازماندهی آن نیز تمرکز خواهیم کرد.
3.1. : پایگاه داده
دادههای ثابتی که برای تولید فیش حقوقی لازم است، در یک پایگاه داده SQL Server Express به نام dbpam (pam = Paie Assistante Maternelle) ذخیره میشود. این پایگاه داده یک مدیر به نام sa با رمز عبور msde دارد.
![]() |
این پایگاه داده شامل سه جدول EMPLOYES، COTISATIONS و INDEMNITES با ساختار زیر است:
Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles
ساختار:
![]() |
|
محتویات آن میتواند به شرح زیر باشد:
![]()
Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire
ساختار:
![]() |
محتوای آن میتواند به شرح زیر باشد:
نرخهای مشارکت تأمین اجتماعی به کارمند بستگی ندارند. جدول بالا تنها شامل یک سطر است.
Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé
![]() |
|
محتوای آن میتواند به شرح زیر باشد:

شایان ذکر است که مزایای دریافتی ممکن است از یک پرستار کودک به دیگری متفاوت باشد. این مزایا در واقع از طریق گروه حقوق (pay grade) به پرستار کودک مربوطه مرتبط هستند. برای مثال، خانم ماری جووینال که رتبه حقوق ۲ (جدول EMPLOYES) دارد، دستمزد ساعتی ۲.۱ یورو (جدول INDEMNITES) دارد.
روابط بین سه جدول به شرح زیر است:
![]() |
یک رابطه کلید خارجی بین ستون EMPLOYES (INDICE) و ستون INDEMNITES (INDICE) وجود دارد.
پایگاه داده [dbpam] که به این روش ایجاد شده است، دو فایل را در پوشه SQL Server Express تولید میکند:
![]() |
فایلهای [dbpam.mdf, dbpam_log.ldf] را میتوان به دستگاه دیگری منتقل کرد و دوباره به سرور Express SGBD SQL در آن دستگاه متصل نمود. در اینجا نحوه انجام آن آمده است:
- فایلهای موجود در BD و [dbpam] به یک پوشه کپی میشوند
![]() |
- سرور اکسپرس SQL را راهاندازی کنید
- با استفاده از کلاینت SQL Server Management Studio Express، فایل [dbpam.mdf] را به SGBD متصل کنید:
![]() |
![]() |
- روی [Databases] کلیک راست کرده و Attach را انتخاب کنید
- فایل [dbpam.mdf] را از طریق یک دکمه ([Add] نمایش داده نشده) انتخاب کنید
- فایل پیوست یک BD ایجاد خواهد کرد که نباید از قبل وجود داشته باشد. در اینجا، در فیلد [Attach As]، BD جدید با نام [dbpam2] نامگذاری شده است.
- ما میتوانیم BD جدید و جداول آن را ببینیم
این تکنیک الحاق BD برای انتقال BD از یک ایستگاه کاری به ایستگاه کاری دیگر مفید است و ما در اینجا گهگاه از آن استفاده خواهیم کرد.
3.2. : نحوه محاسبه حقوق پرستار کودک
اکنون توضیح میدهیم که حقوق ماهانه یک پرستار کودک چگونه محاسبه میشود. بهعنوان مثال، حقوق خانم ماری جووینال را در نظر میگیریم که در ماه حقوق، در طول ۲۰ روز، ۱۵۰ ساعت کار کرده است.
عوامل زیر در نظر گرفته میشوند: | | |
حقوق پایه مراقب کودک با استفاده از فرمول زیر محاسبه میشود: | ||
باید تعدادی از حق بیمه تأمین اجتماعی از این حقوق پایه کسر شود: | | |
مجموع حق بیمه تأمین اجتماعی: | ||
علاوه بر این، پرستار کودک برای هر روز کاری، مستحق دریافت فوقالعاده معیشت و فوقالعاده غذا است. بنابراین، او مزایای زیر را دریافت میکند: | | |
در نهایت، حقوق خالص قابل پرداخت به مراقب کودک به شرح زیر است: |
3.3. یادآوریها ADO.NET
برنامه محاسبه حقوق و دستمزد به اطلاعات موجود در پایگاه داده [dbpam] نیاز دارد. معماری آن به شرح زیر خواهد بود:
![]() |
- در [1]، کاربر یک درخواست ارسال میکند
- در [2]، برنامه حقوق و دستمزد آن را پردازش میکند.
- سپس ممکن است به دادههایی از پایگاه داده نیاز داشته باشد. بنابراین یک پرسوجو را به ارائهدهنده ADO.NET برای SGBD که توسط [4] استفاده میشود، ارسال میکند.
- این ارائهدهنده از پایگاه داده [5] پرسوجو میکند و نتایج را به ارائهدهنده ADO.NET بازمیگرداند که به نوبه خود آنها را به برنامه ارسال میکند
- که این نتایج را پردازش کرده و یک پاسخ ([5]) برای کاربر تولید میکند
اکنون رابطهای اصلی ارائهشده توسط یک ارائهدهنده ADO.NET به مشتریان [3] خود را بررسی خواهیم کرد.
در حالت متصل، برنامه:
- یک اتصال به منبع داده برقرار میکند
- در حالت آنلاین، برنامه:یک اتصال به منبع داده باز میکند اتصال را میبندد با منبع داده در حالت خواندن/نوشتن کار میکند
- ارتباط را قطع میکند
سه رابط ADO.NET عمدتاً در این عملیات دخیل هستند:
- IDbConnection، که خواص و متدهای اتصال را در بر میگیرد.
- IDbCommand، که خواص و متدهای دستور اجراشده SQL را در بر میگیرد.
- IDataReader، که خواص و متدهای نتیجهٔ فرمان Select SQL را در بر میگیرد.
رابط IDbConnection
برای مدیریت اتصال به پایگاه داده استفاده میشود. متدهای M و خواص P این رابط شامل موارد زیر هستند:
نام | نوع | نقش |
P | رشته اتصال پایگاه داده. این مشخص میکند تمام پارامترهای لازم برای برقراری اتصال به یک پایگاه دادهٔ خاص. | |
M | ارتباط را به پایگاه داده تعریفشده توسط ConnectionString باز میکند | |
M | اتصال را میبندد | |
M | یک تراکنش را آغاز میکند. | |
P | وضعیت اتصال: ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken |
اگر Connection کلاسی باشد که رابط IDbConnection را پیادهسازی میکند، اتصال به شرح زیر باز میشود:
رابط IDbCommand
برای اجرای یک دستور SQL یا یک رویهٔ ذخیرهشده استفاده میشود. متدها (M) و ویژگیهای (P) این رابط شامل موارد زیر هستند:
نام | نوع | نقش |
P | مشخص میکند که چه چیزی باید اجرا شود – مقادیر آن را از یک شمارششده میگیرد: - CommandType.Text: دستور SQL را که در خصوصیت CommandText تعریف شده است، اجرا میکند. این مقدار پیشفرض است. - CommandType.StoredProcedure: یک رویهٔ ذخیرهشده در پایگاه داده را اجرا میکند | |
P | - متن دستور SQL که در صورت برابر بودن CommandType با CommandType.Text اجرا میشود - نام رویهٔ ذخیرهشدهای که در صورت برابر بودن CommandType با CommandType.StoredProcedure اجرا میشود | |
P | اتصال IDbConnection که برای اجرای دستور SQL استفاده میشود | |
P | معامله IDbTransaction که در آن فرمان SQL اجرا میشود | |
P | فهرست پارامترها برای یک فرمان پیکربندیشده SQL. فرمان `update articles set price=price*1.1 where id=@id` دارای پارامتر @id است. | |
M | برای اجرای یک دستور SQL Select. این یک شیء IDataReader را بازمیگرداند که نمایانگر نتیجه Select است. | |
M | برای اجرای یک فرمان SQL (بهروزرسانی، درج، حذف). این تابع تعداد ردیفهای تحت تأثیر عملیات (بهروزرسانیشده، درجشده، حذفشده) را برمیگرداند. | |
M | برای اجرای پرسوجوی SQL Select که تنها یک نتیجه بازمیگرداند، مانند: select count(*) from articles. | |
M | برای ایجاد پارامترها IDbParameter برای یک فرمان پیکربندیشده SQL. | |
M | بهینهسازی اجرای یک پرسوجوی پارامتریک را هنگام اجرای مکرر آن با پارامترهای مختلف امکانپذیر میسازد. |
اگر Command کلاسی باشد که رابط IDbCommand را پیادهسازی میکند، اجرای یک فرمان SQL بدون تراکنش شکل زیر را خواهد داشت:
رابط IDataReader
برای محصورسازی نتایج یک فرمان SQL یا Select استفاده میشود. یک شیء IDataReader نمایانگر جدولی با سطرها و ستونها است که بهصورت متوالی پردازش میشوند: ابتدا سطر اول، سپس سطر دوم و غیره. متدها (M) و ویژگیها (P) این رابط شامل موارد زیر هستند:
نام | نوع | نقش |
P | تعداد ستونها در جدول IDataReader | |
M | GetName(i) نام ستون شماره i در جدول IDataReader را برمیگرداند. | |
P | آیتم [i] نمایانگر شماره ستون i از ردیف جاری در جدول IDataReader است. | |
M | به سطر بعدی جدول IDataReader میرود. اگر عملیات خواندن با موفقیت انجام شود، مقدار بولی True را بازمیگرداند، در غیر این صورت False. | |
M | جدول IDataReader را میبندد. | |
M | GetBoolean(i): مقدار بولی ستون شماره i در ردیف جاری جدول IDataReader را برمیگرداند. سایر روشهای مشابه به شرح زیر هستند: GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString. | |
M | Getvalue(i): مقدار ستون شماره i در ردیف جاری جدول IDataReader را به نوع object برمیگرداند. | |
M | IsDBNull(i) مقدار True را بازمیگرداند اگر ستون شماره i از ردیف جاری در جدول IDataReader فاقد مقدار باشد، که با مقدار SQL NULL نشان داده میشود. |
ارزیابی یک شیء IDataReader اغلب به شکل زیر است:









