Monday, July 9, 2007

C# 2.0 -- SQL Server 2005

السلام عليكم,
النهاردة هاتكلم عن موضوع مكمل للموضوعين السابقين, وهو كيفية التعامل مع قاعدة بيانات
SQL Server Database من خلال برنامج مكتوب بالـ C#
في الواقع مع ظهور الـ
Visual Studio 2005 حدثت طفرة في هذا الموضوع فأصبح الامر موضع سحب و إلقاء Drag and Drop ورحمونا من التعامل مع دهاليز قاعدة البيانات:D
سأتكلم عن مثال: نفترض ان هدفي هو برنامج لعرض بيانات موظفين, لكل موظف رقم, اسم, وصف لوظيفته, نوع و تاريخ التحاقة بالوظيفة.
سأقوم بعمل قاعدة بيانات واضع فيها جدول (سأسمية انا
Data انت حر في اي تسمية تضعها), الجدول مكون من 5 اعمدة.
وسأضع فيه بعض البيانات (اي كلام يعني لتجربة البرنامج) ... إذا كنت لا تعرف كيفية عمل قاعدة بيانات
Database او كيفية عمل جدول او.... راجع موضوعي السابق "مقدمة إلى Microsoft SQL Server"

http://img215.imageshack.us/img215/9526/sqlon1.th.png

في البداية نحتاج إلى عملى مشروع جديد من النوع Windows Application
بالطبع يمكنك ان تختار النوع الذي تفضل ولكني سأكمل ان شاء الله بهذا النوع
ولمن لا يعرف فإن الـ
Windows Application تعني انه برنامج عادي ينتج ملف .EXE يمكن تشغيله على حاسبك

http://img100.imageshack.us/img100/7397/newapplicationuc8eb6.th.png

بعد كتابة اسم المشروع واختيار مكان حفظة, يتم انشاء المشروع الجديد

http://img109.imageshack.us/img109/303/newapplication1qs1.th.png

اولا نبدا بإضافة مصدر البيانات (اللي هوا قاعدة البيانات في المثال اللي شغال بيه) وذلك بأختيار Add new Data source من قائمة Data

http://img96.imageshack.us/img96/9071/addingdatasource1db1.th.png

يظهر معالج اضافة مصدر البيانات الجديد, وفي اول شاشة منه يسأل عن نوع مصدر البيانات ويتيح المعالج 3 انواع
1- قاعدة بيانات
Database
وهي تستخدم في حال كون مصدر بياناتك هو قاعدة بيانات
2-
Web service
وهي تستخدم في حال كون مصدر بياناتك هو خدمة من خدمات الويب
Web services. ولمن لا يعرف, فخدمات الويب هي برامج تعمل من خلال الويب وفي الغالب تستخدم في نشر نوع من المعلومات مثل خدمات الأخبار
3-
Object
وتختار في حال كون مصدر بياناتك شئ غير ذلك مثل ملف او برنامج اخر

ولأننا نستخدم قاعدة بيانات فسنختار الاختيار الاول

http://img96.imageshack.us/img96/8941/addingdatasource2wg4.th.png

الخطوة التالية يسأل عن مكان قاعدة البيانات وكيفية الاتصال بها.
وللتوضيح ليس إلا, فإن إي اتصال بقاعدة بيانات يجب ان يحدد فيه معلومات مثل عنوان الخادم, اسم قاعدة البيانات واسم المستخدم وكلمة السر للدخول إلى الخادم. وهذه البيانات تسمي الـ
Connection String
دعنا من كل هذا ولندع
Visual Studio يقوم بالامر, اضغط ذر New Connection

http://img219.imageshack.us/img219/1426/addingdatasource3qg6.th.png

هنا تظهر اهم نافذة واصعبها في التعامل وهي نافذة Add new connection.
تحتوي هذة النافذة على البيانات التي تكون الـ
connection string ففي اول مربع يسأل عن نوع قاعدة البيانات, وبختار المعالج Microsoft SQL Server كنوع افتراضي, ولكن يمكنك تغييره (بضغط ذر Change ) اذا كنت تستخدم نوع اخر من قواعد البيانات مثل اكسيس.
المربع التالي يوضع فيه عنوان الخادم (وهو نفس عنوان الخادم الذي استخدمته في الدخول
Login في بداية كلامنا عن الـ SQL Server ... راجع موضوع "مقدمة إلى Microsoft SQL Server" )
الجزء التالي يسأل عن اسم المستخدم وكلمة السر للدخول إلى قاعدة البيانات, إذا كانت قاعدة بيانات
SQL Server مثبت على حاسبك فأختر Use Windows Authentication. اما إذا كانت قاعدة البيانات موجودة على حاسب اخر فاختر Use SQL Server Authentication وادخل اسم المستخدم وكلمة المرور التي اعطاها لك مدير قاعدة البيانات Database Admin.
اخر جزء يسأل عن اسم قاعدة البيانات التي سوف نعمل عليها.
بعد ملئ البيانات السابقة اضغط ذر
Test Connection لإختبار ما اذا كان كل ما ادخلته من بيانات صحيحا ام لا.

http://img100.imageshack.us/img100/8607/addingdatasource4fm8.th.png

سيتم ضبط كل شئ إذا ما كانت البيانات التي ادخلتها صحيحة وتم الاتصال بالفعل بقاعدة البيانات, ويمكنك ان تلقي نظرة على الـ Connection String بالضغط على علامة الـ "+" المجاورة لكلمة Conncetion String

http://img100.imageshack.us/img100/3149/addingdatasource5ma9.th.png

النافذة التالية يسأل فيها عن حفظ الـ Conncection string في ملف الـ Appliction configuration اتركه كما هو.
اما الـ
Application Configuration فهي ملف يقرأة البرنامج عند عمله ويوضع فية بعض الثوابت الخاصة بعمل البرنامج مثل الـ connection string.
جميل... طيب ما الفرق بين الحفظ في الـ
Application Configuration وحفظ الثابت في إي كلاس Class ؟
من وجهة نظر البرنامج نفسة لا فرق, اما من وجهة نظر المبرمج فهناك فارق كبير. فلأن الـ
Application Configuration هي ملف عادي مكتوب بلغة الـ XML مما يعني امكناية تعدبلة من خلال اي محرر نصوص عادي مثل الـ Notepad وبالتالي يمكنك بكل سهولة تغييير ذلك الثابت دون الحاجة إلى إعادة بناء Compile برنامجك من البداية. وهذا الموقف قد يحدث بكثره, فمثلا إفترض ان عنوان خادم قاعدة البيانات قد تغير, فملا عليك وقتها إلا فتح ملف الـ Application Configuration وتعديل الاسم.

http://img141.imageshack.us/img141/7411/addingdatasource6vq1.th.png

النافذة التالية يسأل فيها عن الجداول التي سوف تضمنها في مشروعك, اختر ما تحب ثم اضغط Finish
اما انا فقد اخترت فقط جدول واحد اسمه
Data

http://img154.imageshack.us/img154/6100/addingdatasource7xf4.th.png

يظهر الجدول (او الجداول) التي قمت بتضمينها في مشروعك في نافذة Data Sources
ولمن لا تظهر لديه هذه النافذة, اختر
Show Data Sources من قائمة Data

http://img154.imageshack.us/img154/9484/addingdatasource8sx2.th.png

إلى هنا تم إضافة قاعدة البيانات إلى المشروع, ولكنها لا تظهر على واجهة البرنامج. الحل .... سحري!!!
فقط اسحب اسم الجدول الذي تريده من نافذة الـ
Data Sources والقه على واجهة البرنامج Form فتجد Visual Studio قد وضع كل ما يمكن تخيله من مكونات للتعامل مع الجدول... الم اقل لك... انه موضوع Drag and Drop ليس إلا :D

http://img247.imageshack.us/img247/4077/datagridws6.th.png

ابدأ بضبط شكل نافذة استعراض الجدول (تمسي DataGridView ) لكل تصبح واجهة البرنامج محترمة بعض الشئ :P

http://img246.imageshack.us/img246/315/datagrid1jd3.th.png

قم بتشغيل البرنامج بالضغط على ذر F5 من لوحة المفاتيح, لتجد كل شئ قد تم, يمكنك إضافة , تعديل و حذف إى سجل... مممم اعتقد انه لم يتبقي في مشروعي سوى البحث.
سأضيف مربع
TextBox وذر Button في الشريط العلوي للبرنامج لعمل إمكانية البحث

http://img154.imageshack.us/img154/3457/datagrid2mh4.th.png

أغلق البرنامج ولنعود إلى Visual Studio , اذهب إلى الشريط العلوي لبرنامجك واضغط علية سجد شكل ذر ظهر في أخره, اضغط على ذلك الذر لإضافة مكون جديد إلى الشريط

http://img194.imageshack.us/img194/6141/toolbarcn0.th.png

http://img213.imageshack.us/img213/8458/toolbar1ca3.th.png

اختر Button لأضافة ذز, ثم كرر العملية ولكن بالضغط على TextBox لإضافة مربع نص.

http://img146.imageshack.us/img146/9651/toolbar3zn7.th.png

غير اسم مربع النص والذر إلى اسماء معبرة (محترمة :D ) وذلك بالضغط على اي منهما وتغيير اسمة من نافذة الخصائص, ثم كرر العملية مع الأخر.
لقد اختر في مشروع اسمي
QueryToolStripTextBox و queryToolStripButton لمربع النص والذر على الترتيب. يمكنك اختيار اية اسماء تفضلها.

http://img303.imageshack.us/img303/7752/toolbar2iq0.th.png

http://img170.imageshack.us/img170/9213/toolbar4mk4.th.png

انظر إلى اسفل نافذة التصميم ولا حظ اسم مكون موضوع بها وهو الـ BindingSource. في مشروع (كما بالصورة) يظهر اسمهة DataBindingSource وذلك لأن اسم الجدول الذي اخترته كان "Data". ربما يكون الاسم الموضوع عندك مختلف تبعا لأسم الجدول الذي ادرجته عندك.

http://img223.imageshack.us/img223/963/toolbar5sd5.th.png

يتبقي ان نكتب كود البحث, اضغط دبل كليك على الذر لتظهر نافذة الكود واكتب فيها الكود التالي مع مراعاة استبدال DataBindingSource بأسم الـ Binding Source الموجود في مشروعك

http://img84.imageshack.us/img84/1125/toolbar6uk5.th.png

اضغط F‏5 لتشغيل برنامجك, تلاحظ خاصية البحث!!! .... وهذا كل شئ Open-mouthed

http://img223.imageshack.us/img223/5826/toolbar7ti9.th.png

 

مقدمة في SQL Server 2005

Microsoft SQL Server هو خادم لقواعد البيانات يتمتع بامكنيات كبيرة واهمها امكانية التعامل معه من خلال كل لغات البرمجة المعروفه. كذلك يمكن استخدامه في البرامج المحلية (اي ان البرنامج وقاعدة البيانات تكونان على نفس الجهاز) او في برامج الويب Web Applications.
في الاصل التعامل مع
Microsoft SQL Server يتم عن طريق المحث Command Line إلا انه هناك اداة تسمى SQL Server Management Studio تتيح واجهة رسومية Graphical User Interface للتعامل مع قواعد البيانات, وهو ما سأستخدمه في الشرح بأذن الله.
لمن لم يجد عنده
SQL server Management Studio يمكن تحميل نسخة مجانية من موقع مايكروسوفت
هنا.
عند فتح
SQL server Management Studio لأول مرة تظهر نافذة الدخول Connect to Server وفيها يطلب اسم مستخدم وكلمة مرور. ولكن لأن هذا الخادم موجود على جاهزي فهناك خيار اسمة Windows Authentication اي انه يدخل إلى الخادم من خلال بيانات المستخدم الخاصة بنظام ويندوز لديك.

http://img155.imageshack.us/img155/1/loginhn6.th.png


بالطبع اذا كان الخادم ليس على جهازك فيجب ان يعطيك مدير قاعدة البيانات
Database Admin. اسم مستخدم وكلمة مرور.
بمجرد دخولك إلى الخادم تظهر لك نافذة بها المكانيات الموجودة بالخادم. لن اتطرق إلى التفاصيل المملة في هذة المرحلة ولكن في مرة قادمة ربما افعل.
ستهتم كثيرا بنافذة الـ
Object Explorer التي تظر في اقصي اليسار, ففيها استعراص كامل لما يمكنني التعامل معه في الخادم (تذكر انه ليس كل شئ متاح لي فهناك صلاحيات!).

 

http://img80.imageshack.us/img80/9420/objetexploreroe8.th.png


اول فرع في الشجرة هو
Databases وفيها يظهر جميع قواعد البيانات التي يمكنني التعامل معها في هذا الخادم. اول شئ نفعله هو اضافه قاعدة بيانات جديدة وذلك بكليك يمين على كلمه Databases ثم نختار New database

 

http://img120.imageshack.us/img120/4379/addnewiz6.th.png


يظهر مربع خيارات قاعدة البيانات الجديدة اكتب اسمها واسم المستخدم (يفضل تركه كما هو في هذه المرحلة) ثم اضغط
OK فظهر قاعدة البيانات الجديدة

 

http://img120.imageshack.us/img120/6339/addnew1xg4.th.png

 

http://img153.imageshack.us/img153/5995/newdbcx9.th.png

 


وكما ترى فهي فارغة لا يوجد بها اي جداول. وكي تنشأ جدولا, اضغط كليك يمين على كلمة
Tables ثم اختر New Table فتظر النافذة الخاصة بامكانيات الجدول وخاناتة.

 

http://img155.imageshack.us/img155/337/notablesvz7.th.png

 

http://img153.imageshack.us/img153/9374/newtablekn4.png

 


وهي تحتوي على مكان لإضافة الاعمدة(في الوسط) وخصائص كل عمود (اسفلها) كما توجد خصائص الجدول على اليمين.

 

http://img155.imageshack.us/img155/8450/newtable1xr4.th.png

 


سأبدا بإضفة عدد من الاعمدة. نلاحظ ان كل عمود يحتاج إلى 3 اشياء كي يتم انشاءة
1-اسم
2-نوع
بيانات
3- امكانية تركه فارغا
اما الاسم فهو اسم العمود, وامكانية تركه فارغا ان تحدد اذا ما كان مسموحا ادخال صف جديد من البيانات (يسمى سجل
Record) وترك ذلك العمود فارغا.

 

http://img155.imageshack.us/img155/3609/columnsry4.th.png

 


اما نوع البيانات, فهو نوع البيانات المسموح وضعه في ذلك العمود.
حالما تنتهي من وضع الاعمدة التي تريدها اضغظ زر حفظ الكل
Save All (او اختارها من قائمة File ) سيسألك عن اسم الجدول, ضع له اسما ثم OK

 

http://img140.imageshack.us/img140/774/tablenamejz7.th.png

 

http://img209.imageshack.us/img209/8996/tablecreatedez6.th.png

 


يظهر الجدول الجديد في الـ
Object Explorer . لوضع بيانات به نضغط كليك يمين عليه ثم نختار Open table لتظهر لنا نافذة استعراض الجدول.

 

http://img80.imageshack.us/img80/6053/opentableqy3.th.png

 

http://img138.imageshack.us/img138/2614/showtablegx3.th.png

 


يمكنك بعدها إضافة البيانات التي تريدها.... واهلا بك في عالم قواعد البيانات!!! Wave

 


http://img176.imageshack.us/img176/253/showtable1yj5.th.png

 

 

ما هي قواعد البيانات؟

اي نظام برمجي يتكون في الأساس من مكونان
1- اوامر
2- بيانات او معلومات
وتقو الاوامر بدور المايسترو في التعامل مع البيانات وتنفيذ العمليات عليها. ومنذ ظهرت الاغراض المتقدمة للحاسب (بعيدا عن كونه اله حاسبة او ما شابه :
D ) ظهرت الحاجة إلى حفظ البيانات ومن ثم ظهرت التنكونوجيات الخاصة بحفظ البيانات. وتطورت من الاشرطة المثقبة Bunched Tapes حتي الأقراص المدمجة CD مرورا بالديسكات والهارد ... إلخ.
كل تلك التعاملات تتم مع الجزء الصلب, ولأن مادية الحاسب
Hardware لا يمكن فصلها عن البرامج Software فقد ظهرت الحاجة لتتوير نظم حفظ البيانات.
في البداية كانت الملفات في الملاذ الاول والاخير في حفظ البيانات, حتي ظهرت عيوبها, فالحفظ في الملفات له كثير من العيوب
1- صعوبة التعامل مع الملافات داخل البرامج
2- كثرة الاخطاء
3- صعوبة ترتيب البيانات داخل الملفات
ووقتها كان على المبرمج ان يقضي معظم وقته في وضع طريقه للتعمال مع الملفات في برنامجه مما كان يشكل عقبة كبيرة, ولذلك ظهرت قواعد البيانات.
التعريف العام لقاعدة البيانات هي مجموعة من الجداول تحمل كما معينا من البيانات. والتاعمل معها يكون بالتعامل مع البيانات مباشرة فأنت ليت في حاجة ان تعرف كيف تحفظ هذه البيانات او اي شئ من هذا.... ولكن كيف حدث ذلك؟
حدث ذلك عن طريق التقسيم, فلأن كل برنامج كان ينقسم إلى جزئين (جزء البرمجة العادية وجزء العمل مع الملفات) فقد وفرت شركات البرمجيات حل قواعد البيانات لإراحة المبرمجين من التعامل مع الملفات, فقط قل لقاعدة البيانات ان تحفظ البيانات هذه فتحفظها وهذا كل شئ.
داخليا, تنقسم نظم قواعد البيانات إلى قسمين
1- البيانات نفسها
2- خادم قاعدة البيانات
Database Server
الاولي مفهومه, ماذا عن الثانية؟
خادم قاعدة البيانات هو برنامج تعكف الشركة المقدمة لقاعدة البيانات (سواء مايكروسوفت او اوراكل او... ) على تطويره بحيث يأخذ البيانات من المبرمج ويضعها في ملفات بطريقة ما مع امكانية استرجاعها.
فأنت عندما تريد حفظ بيانات ما تنادي على الخادم وتطلب منه ان يحفظها فيحفظها, او تطلب منه استرجاع بيانات معينه فيرجعها.
وهناك انواع عديدة من قواعد البيانات مثل
Access, Microsoft SQL Server , Oracle والفروقات بينهم عديدة تحتاج إلى مجلدات لذكرها. لكن هناك فرق مهم احب ان اوضحه.
قواعد بيانات اكسيس تنتمي إلى نوع يمسى
Desktop databaes او قواعد بيانات سطح المكتب وهي نظم موجهة بالأساس إلى المستخدم العادي فهي لا تحتاج إلى امكانيات عاليه بالحاسب (رام او سرعة او...) كما ان خادم قاعدة البيانات يكون صغير الحجم لأنه سوف يدمج في البرنامج.
اما قواعد البيانات الأخري مثل
SQL Server و Orcale فهي تعمل بتكنيك مختلف, فالخادم منفصل تماما عن البرنامج مما اتاح امكانيات كبيرة في التعامل عن طريق الشبكات او حتي الانترنت, فمثلا قد يعمل البرنامج على حاسبي مستخدما قاعدة بيانات موجودة على حاسب اخر ربما يكون في بلد اخرى. كذلك فإن الخادم في هذه الحالة يكون كبير الحجم ويحتاج في العادة إلى حاسب ذو امكانيات اعلى.
بصفة عامة, إذا ما كانت البيانات موجهه نحو حاسب واحد, او كان البرنامج صغيرا فإن
Access هو بطل المعركة بلا منافس. (مثل برنامج لتسجيل مبيعات ومشتروات متجر ما)
اما إذا تعددت الأجهزة المستفيدة من نفس البيانات, فإن
Access يتوارى خجلا في حضور SQL Server و Orcale (مثل قاعدة بيانات لمطار).
اتمني ان اكون قد ازلت جزء من الغموض عن موضوع قواعدة البيانات
السلام عليكم...