اشاره :
با آمدن Visual Studio 2005 به عرصه برنامهنويسي بسياري از اعمال روتين برنامهنويسي مانند کار با بانکهاي اطلاعاتي ساده و آسانتر از پيش گشته است.
[url=<A]<A[/url]
:
در يک نگاه اجمالي از نظر رابط کاربري و قابليتهاي کاربردي Visual Studio در نسخه 2005 خود تحول زيادي داشته و در همين راستا تعداد زيادي از کنترلهاي جديد مربوط به بانک اطلاعاتي به اين نرمافزار اضافه شده است. البته با توجه تجاربي که در استفاده از اين ابزارهاي جديد داشتهايم به نظر ميرسد اين کنترلها و ابزارهاي جديد در قسمتWindows Application به نسبت Web Applicationها ، بسيار پختهتر و کاملتر ميباشد.
آغاز پروژه
در اين مقاله سعي بر آن داريم با کنترل جديد و بسيار قدرتمند GridView و همچنين قسمت Dataset Designer آشنا شويم و برنامهاي ساده براي استفاده از اين ابزارها به زبان Visual Basic بنويسيم. البته از آنجايي که اکثر مراحل نوشتن برنامه به کمکDesigner ويژوال استوديو انجام ميشود برنامه نويسان C# نيز ميتوانند به خوبي از اين مقاله بهرهمند شوند.
از آنجايي که اين مقاله به صورت گام به گام ميباشد،براي استفاده از اين مقاله نياز به يک آشنايي بسيار اندک از مفاهيم بانک اطلاعاتي داريد .
نرم افزارهاي مورد نياز که بايد روي سيستم نصب شده باشند:
Microsoft SQL Server 2000
Microsoft Visual Studio.NET 2005
پيش از اينکه وارد بحث نوشتن برنامه شويم براي کساني که به DataGrid در Visual Studio 2003 کار کردهاند چند نمونه از مزيتهاي جديد و جالب GridView را بررسي ميکنيم:
[FONT=Wingdings][COLOR=#NaNNaNNaN]l قابليت نمايش تصاوير : با استفاده از اين امکان برنامه نويسان ميتوانند براحتي تصاويري که در بانک اطلاعاتي به فرمتهاي مختلف ذخيره کردهاند بدون هيچ دردسري درون GridView نمايش دهند.
[FONT=Wingdings][COLOR=#NaNNaNNaN] قابليتهاي AutoSize : با استفاده از اين قابليتها بر خلاف DataGrid براحتي ميتوانيد عرض و ارتفاع سلولهاي نمايش اطلاعات را به صورت اتوماتيک در حين اجرا برنامه تنظيم نماييد و ديگر نگران مخفي ماندن اطلاعات نباشيد.
[FONT=Wingdings][COLOR=#NaNNaNNaN] امکان نمايش انواع کنترلها درون سلولهاي GridView :با استفاده از اين امکان شما ميتوانيد انواع کنترلهاي مورد نيز را درون GridView نمايش دهيد، که ليست آنها عبارت است از:
Button ، Image ، CheckBox ، ComboBox ، TextBox و Link Button .
[FONT=Wingdings][COLOR=#NaNNaNNaN]l قابليت استفاده از Foreign Key : اين امکان بسيار مفيد به شما اجازه ميدهد به راحتي مقدار يک فيلد که به جدول ديگري Foreign Key دارد را به صورت ComboBox نمايش دهيد و کاربر به راحتي مقدار مربوط به فيلد را از ليست انتخاب نماييد(در برنامه نمونه کامل توضيح داده خواهد شد).
[FONT=Wingdings][COLOR=#NaNNaNNaN]l قابليت Double Click Editing : يکي از مشکلاتي کهDataGrid داشت اين بود که وقتي براي آن منوي ضميمه( Context Menu ) تعريف ميکرديم در فيلدها متني با منوي پيش فرض Textboxها تداخل پيدا ميکرد و معمولا منوي ضميمهاي که ما تعيين ميکرديم نمايش داده نميشد ولي در GridView به خاطر وجود اين خاصيت ديگر مشکل منوي ضميمه نخواهيم داشت.
[FONT=Wingdings][COLOR=#NaNNaNNaN] حذف Table Styleها : ديگر براي فرمت بندي GridView نيازي به Table Style نداريم بلکه حذف و اضافه کردن ستونها و تغيير عنوانها به راحتي و دروني در حالت Design Time امکان پذير است.
البته امکانات ديگري نيز اضافه گرديده که مهمترين آنها ، همين مواردي بود كه اشاره شد.
اکنون به سراغ نوشتن برنامه برويم.
مراحل انجام پروژه:
1ـ طراحي بانک اطلاعاتي در MS SQL Server 2000.
2ـ ساخت Dataset در Dataset Designer مربوط به بانک اطلاعاتي.
3ـ تنظيم GridView براي نمايش و ويرايش اطلاعات درون بانک.
بانک اطلاعاتي در MS SQL Server 2000
کساني که مقاله برنامهنويسي بانک اطلاعاتي در VB.Net را در شمارههاي دو سال گذشته خواندهاند با اين قسمت آشنا هستند ولي کساني که جديدا به خوانندههاي ماهناهه پيوستهاند يا طريقه ساخت بانک اطلاعاتي در MS SQL Server 2000 را تاکنون ياد نگرفته اند حتما اين قسمت را مطالعه فرماييد.
قدم اول:
در اين قدم ما بايد ساختار جداول دادهاي مورد نظر را طراحي کنيم. با توجه به خواستههايي که ما از پروژه داريم يک جدول با ساختار زير براي ذخيره سازي دادهها مورد نياز است:

جدول 1 : اطلاعات تماسها

جدول 2 : نگهداري ليست گروههاي موضوعي

جدول 3 : نگهداري ليست
قدم دوم :
خب اکنون که طرح جدول دادهاي مشخص شد به سراغ مرحله ساخت جدول ، بانک اطلاعاتي و کاربر مربوط به بانک ميرويم.براي اين کار شما بايد نسخه سرور
SQL Server 2000 را نصب کرده باشيد و از RUN بودن آن اطمينان حاصل کنيد براي اين کار در گوشه سمت چپ پايين بايد آيکون آن به شکل 1 باشد :

شکل 1
از مسير زير Enterprise Manager را اجرا کنيد:
> Program Files > Microsoft SQL Server > Enterprise Manager
سمت چپ را باز کنيد مطابق شکل 2 سرور local (يا شايد نام کامپيوترتان) را انتخاب کنيد:

شکل 2
نوار ابزار دکمه Run a Wizard را بزنيد(مطابق شکل 3) :

شکل 3
زدن دکمه فوق ويزارد زير اجرا ميشود از آنجا مطابق شکل 4 گزينه
Create Database Wizard را انتخاب کنيد و دکمه OK را براي شروع ساخت بانک اطلاعاتي فشار دهيد:

شکل 4
زدن اين دکمه يک پنجره ظاهر ميشود از آنجا دکمه Next را کليک کنيد تا پنجره شکل 5 ظاهر شود :

شکل 5
فيلد Database Name مطابق شکل فوق نام بانک اطلاعاتي را PhoneBook وارد کنيد. دکمه Next رابزنيد و مراحل بعد را مطابق تنظيمات پيشفرض رها کنيد و مرتب دکمه Next را انتخاب کنيد و در آخر دکمه Finish را بزنيد که در اين صورت پيغامي مبني بر اينکه Database شما با موفقيت ساخته شد نشان داده ميشود. OK را بزنيد، پس از آن، از شما پرسيده ميشود که آيا ميخواهيد Maintenance Plan را براي بانک اطلاعاتي خود تنظيم کنيد ( منظور تنظيمات مربوط به گرفتن نسخه پشتيبان و ساير امور مربوط به نگهداري بانک اطلاعاتي ميباشد ) دکمه No را انتخاب کنيد .
اکنون با نک اطلاعاتي شما ساخته شده است !
مطابق شکل 6 از Treeview سمت چپ، قسمت Tables مربوط به بانک اطلاعاتي PhoneBook را انتخاب کنيد :

شکل 6
Tables مربوط به بانک اطلاعاتي خود کليک راست کرده و گزينه New Table را انتخاب کنيد در پنجره ظاهر شده مطابق شکل 7 تماميفيلدها را پر کنيد :

شکل 7
تكته : غير از فيلد UID که به عنوان کليد اصلي جدول (براي ثبت يک فيلد به عنوان کليد اصلي روي آن کليک راست کرده و از منوي زمينه گزينه Set as Primary Key را انتخاب نماييد) در نظر گرفتهايم و بايد گزينه Identity را به Yes تغيير دهيم( مطابق شکل 7 ) براي ساير فيلدها تنظيم خاصي لازم ندارد و فقط با دقت مطابق شکل فوق فيلدها ي مربوطه را پر کنيد .
اکنون از نوار ابزار روي دکمه Save کليک کنيد در پنجره ظاهر شده ، نام جدول را Contact وارد و دکمه OK را کليک کنيد .
پس از ساخت جدول Contact نوبت به جدول Groups ميرسد.
روي Tables مربوط به بانک اطلاعاتي خود کليک راست کرده (شکل 6) و گزينه
New Table را انتخاب کنيد.
در پنجره ظاهر شده مطابق شکل 8 تماميفيلدها را پر کنيد.

شکل 8
نكته : غير از فيلد GroupID که به عنوان کليد اصلي جدول در نظر گرفتهايم و بايد گزينه Identity را به Yes تغيير دهيم ( مطابق شکل 8 ) براي ساير فيلدها تنظيم خاصي لازم ندارد و فقط با دقت مطابق شکل فوق فيلدهاي مربوطه را پر کنيد .
اکنون از نوار ابزار روي دکمه Save کليک کنيد در پنجره ظاهر شده نام جدول را Groups وارد کنيد و دکمه OK را کليک کنيد .
پس از ساخت جدول Groups نوبت به جدول City ميرسد.
روي Tables مربوط به بانک اطلاعاتي خود کليک راست کرده (شکل 6) و گزينه
New Table را انتخاب کنيد.
در پنجره ظاهر شده مطابق شکل 9 تماميفيلدها را پر کنيد.

شکل 9
نكته : غير از فيلد CityID که به عنوان کليد اصلي جدول در نظر گرفتهايم و با يد گزينه Identity را به Yes تغيير دهيم( مطابق شکل 9 ) براي ساير فيلدها تنظيم خاصي لازم ندارد و فقط با دقت مطابق شکل فوق فيلدهاي مربوطه را پر کنيد .
اکنون از نوار ابزار روي دکمه Save کليک کنيد در پنجره ظاهر شده نام جدول را City وارد کنيد و دکمه OK را کليک کنيد.
جداول مورد نظر را ساختيم !
ارتباط كاربر با بانك اطلاعاتي
اکنون بايد يک کاربر براي ارتباط با بانک اطلاعاتي به SQL Server معرفي کنيم .
براي اينکار دوباره روي دکمه Run a Wizard از نوار ابزار کليک کنيد از پنجره ظاهر شده گزينه Create Login Wizard را انتخاب کنيد از پنجره ظاهر شده دکمه Next را انتخاب کنيد تا پنجره شکل 10 ظاهر شود :

شکل10
SQL Server Login را مطابق شکل فوق انتخاب کرده دکمه Next را بزنيد در مرحله بعد از شما نام کاربري و کلمه عبور پرسيده ميشود شما کلمه عبور و نام کاربري را iran وارد کنيد (iran را فراموش نکنيد! چون بعدها خيلي به اون نياز داريم ) و دکمه Next را کليک کنيد در پنجره بعدي گزينه System Administrators را تيک بزنيد و دکمه Next را انتخاب کرده در پنجره بعد گزينه PhoneBook را تيک بزنيد. روي دکمه Next کليک کرده و در پنجره بعد دکمه Finish را براي اتمام کار کليک کنيد.
کاربر مورد نظر به ليست کاربران بانک افزوده شد ولي به صور ت پيشفرض حقوق چنداني براي دسترسي با بانک PhoneBook ندارد براي اعطاي اين حقوق مراحل زير را ادامه دهيد :
از TreeView سمت چپ مطابق شکل 11 گزينه Users بانک اطلاعاتي PhoneBook را انتخا ب کنيد و پس از آن روي کاربر IRAN در ليست سمت راست ، Double Click کنيد و در پنجره ظاهر شده گزينه db_owner را تيک بزنيد و OK را انتخاب کنيد.

شکل 11
کاربر ما حق هر گونه کاري را بروي بانک PhoneBook دارد .
ايجاد ارتباط بين جداول
اکنون نوبت به ايجاد ارتباط بين جداول رسيده است .
يک از مهمترين قسمتهاي طراحي بانک اطلاعاتي پس از نرمالسازي ، قسمت ايجاد ارتباطات (Relationships) ميباشد که توسط آن ميتوانيم يکپارچگي
(Integrity)بانک اطلاعاتي را تثبيت کنيم.
مفهوم Integrity به زبان ساده يعني يکپارچگي اطلاعات، مثلا فرض کنيد در يک سيستم ، اطلاعات دانشجو شامل مشخصات فردي، وامهاي تحصيلي و سوابق تحصيلي هر دانشجو را ميخواهيم ذخيره کنيم. در اين حالت براي هر کدام از موضوعات بايستي يک جدول جداگانه بسازيم پس جدول A شامل مشخصات فردي دانشجو، جدول B وامهاي تحصيلي و جدول C سوابق تحصيلي دانشجو ذخيره خواهد شد؛ در اين حالت در جدول A يک شماره منحصر بفرد(همان شماره دانشجويي) براي هر دانشجو در نظر ميگيرند که به اين شماره منحصر بفرد در مفاهيم بانک اطلاعاتي Primary Key يا کليد اصلي گويند پس با اين حساب کليد اصلي ، فيلدي در جدول اطلاعاتي ميباشد که مقدارش يکتاست و براي هيچ دو رکوردي تکراري نميباشد. سپس در جداول B وC از اين کليد اصلي استفاده ميکنند مثلا در جدول B پس از وارد کردن اطلاعات وام، شماره دانشجويي که اين وام را اخذ کرده وارد ميکنند از آنجايي که اين دانشجو ممکن است چندين وام اخذ کند پس ممکن است فيلد شماره دانشجو در اين جدول تکراري شود به فيلد شماره دانشجويي در جدول B در اصطلاح بانک اطلاعاتي Foreign Key يا کليد خارجي ميگويند. پس کليد خارجي، فيلدي از يک جدول است که مقدار آن به فيلدي در جدول ديگر اشاره ميکند که آن فيلد در جدول دوم کليد اصلي ميباشد.
فرض کنيد که در جدول B اطلاعات يک وام وارد گرديد و کاربر سيستم شماره دانشجويي را اشتباه وارد نمود يعني شماره دانشجويي وارد شده متعلق به هيچ دانشجويي نباشد در اين حالت يک وام پرداخت گرديده که مشخص نيست براي چه کسي بوده! در اين وضعيت ميگويند بانک اطلاعاتي يکپارچگي يا Integrity خود را از دست داده، يعني حداقل يک رکورد در يک جدول فرزند (در مثال ما جدول B) وجود دارد که رکورد متناظر آن در جدول پدر(در مثال ما جدول A) وجود ندارد.
براي حل اين مشکل راهکارهاي زيادي وجود دارد که بهترين آن ايجاد ارتباط بين جداول ميباشد.
اکنون که با اهميت حفظ Integrity بانک اطلاعاتي آشنا شديم طريقه ساخت آن را براي بانک Phonebook قدم به قدم مرور ميکنيم.
براي بانک Phonebook ، تعريف Integrity بدين شکل است که براي هر مقدار CityID در جدول Contacts يک رکورد متناظر در جدول City وجود داشته باشد و همچنين براي هر مقدار GroupID در جدول Contacts يک رکورد متناظر در جدول Groups وجود داشته باشد.
مراحل زير را قدم به قدم اجرا نماييد:
مطابق شکل 12 به قسمت Diagrams برويد سپس در فضاي خالي سمت راست يا روي گزينه Diagrams کليک راست کرده و از منوي زمينه گزينه
"New Database Diagram …" را انتخاب نماييد.

شکل 12
پنجره ظاهر شده روي گزينه Next کليک کنيد در پنجره بعد مطابق شکل 13 سه جدول Contacts, City, Groups را انتخاب نماييد و روي دکمه Next کليک کنيد.

شکل 13
پنجره بعدي روي دکمه Finish کليک کنيد.سپس جدول Contacts را انتخاب و روي آن کليک راست نماييد از منوي زمينه گزينه "Relationships …" را انتخاب کنيد.
در پنجره ظاهر شده روي دکمه New کليک کنيد. جدول
Primary Key Table را City و Foreign Key Table را Contacts انتخاب کنيد. درون فيلدها از ليست CityID را انتخاب نماييد و گزينههاي
Cascade Update Related Fields و Cascade Delete Related Records را فعال نماييد( مطابق شکل 14 ).

شکل 14
پنجره شکل 14 چندين گزينه وجود دارد که برخي از آنها را مختصرا توضيح ميدهيم:
Check existing data on creation : يعني هنگام ايجاد ارتباط بين دو جدول ، صحت ارتباط صحيح اطلاعاتي که قبلا در جداول وجود داشته بررسي شود.
Enforce relationship for INSERTs and UPDATEs : يعني هنگاميکه يک رکورد در جدول Foreign Key وارد ميشود يا مقاديريش تغيير ميکند وجود رکورد متناظر در جدول Primary Key بررسي گردد.
Cascade Update Related Fields : يعني وقتي مقدار فيلد مورد نظر در جدول Primary Key تغيير ميکند سيستم به صورت خودکار مقدار فيلدهاي متناظر در جدول Foreign Key را نيز بروزرساني کند مثلا اگر در جدول City يک شهر به شماره 2 داشته باشيم و متناظر با آن 3 تماس مربوط به اين شهر در جدول Contact وجود داشته باشد در صورتي که مقدار شماره شهر از 2 به 5 در جدول City تغيير کرد هر 3 تماس موجود در جدول تماسها نيز مقدار فيلد CityID آن به 5 تغيير نمايد.
Cascade Delete Related Fields : يعني وقتي که يک رکورد از جدول
Primary Key حذف ميشود تمام رکوردهاي متناظر آن در جدول Foreign Key نيز حذف گردد.
دکمه Close کليک کنيد تا ارتباط ذخيره شود سپس مجددا روي جدول Contacts کليک راست کرده و مانند مرحله قبل پنجره ايجاد ارتباط را نمايش دهيد.در پنجره ظاهر مانند مرحله قبل عمل کنيد منتهي در اين مرحله به جاي جدول City جدول Groups را انتخاب کنيد و به جاي CityID فيلدهاي GroupID را انتخاب نماييد( مطابق شکل 15).

شکل 15
دکمه Close کليک کنيد. اگر همه موارد را به درستي انجام داده باشيد پنجره دياگرام شما مطابق شکل 16 خواهد بود.

شکل 16
از نوار ابزار روي دکمه Save کليک کنيد. در پنجره ظاهر شده نام دياگرام را PhoneDiagram وارد و دکمه OK را کليک کنيد .
ساخت و تنظيم بانک اطلاعاتي نيز به پايان رسيد!
نکته : قبل از اينکه وارد بحث برنامهنويسي شويم بايد اين نکته را بگوييم که اگر در هنگام نصب SQL Server نوع Authentication را به صورت
Mix Mode Windows And SQL Authentication انتخاب کرده ايد که در ارتباط با بانک با مشکلي مواجه نخواهيم شد در غير صورت اگر مطمئن نيستيد يا نوع Authentication را به صورت
Windows Authentication انتخاب کرده ايد براي حل اين مشکل مراحل زير را انجام دهيد:
در Treeview سمت چپ مطابق شکل 2 روي سرور Local کليک راست کرده از منوي زمينه گزينه Properties را انتخاب نماييد .
در پنجره ظاهر شده (شکل 17) به برگه Security برويد و مطمئن شويد که گزينه
SQL Server And Windows فعال ميباشد.

شکل 17
















