السلام عليكم ورحمة الله وبركاته

هذا هو الدرس الاخير في طرق ربط قواعد البيانات باستخدام  C شارب, حقيقة هذا مو درس جديد هو عبارة عن امتداد للدرس الي فات .

خلونا نتذكر اش سوينا في الدرس الي فات: اول حاجة عملنا فورم بسيط واستخدمنا Adapter عشان نربط ما بين قاعدة البيانات والفورم وبعد كذا انشئنا DataSet وسميناها dataSet11 والي عن طريقها راح نسوي كل العمليات الممكنه على قواعد البيانات (INSERT, UPDATE , DELETE) المهم, الحين راح نشوف كيف نسوي ادخال لبيانات جديده على هذي الـ dataSet11

الفكره مره بسيطه وهي نفس الفكره الي استخدمناها في ادخال بيانت لأي اوبجكت من نوع DataTable (كما ورد في الدروس السابقه) بس كل الي علينا نسويه هو تحديد الجدول المراد ادخال بيانات فيه

لانه الـ dataSet11 ممكن يكون فيها اكثر من جدول.

تمهيد:

الـ DataSet ممكن ننشئها برمجيا عن طريق انشاء Adapter وتحديد SELECT COMMAND لهذا الـ Adapter و Connection وبعد كذا انشاء ملف XML فيه مواصفات قاعدة البيانات امراد الربط معاها وهذي المواصفات تشمل اسماء الجداول واسماء كل عمود في كل جدول وكل الـ Constraints لكل جدول, والـ DataSet الي ننشئها بهذي الطريقه نسميها Weak DataSet وعشان ندخلها بينات خلونا نفرض السيناريو التالي: عندنا جدول اسمه MyTable وفيه اعمده اسماؤهم Column1,Column2, Column3 واسم الـ DataSet هو myDataSet فالكود راح يكون زي كذا تقريبا:

في حالة استخدام DataRow Object

DataRow dr = myDataSet.Table["MyTable"].NewRow ();

dr["Column1"] = "Anything";

dr["Column2"] = "Anything";

dr["Column3"] = "Anything";

myDataSet.Table["MyTable"].Rows.Add (dr);

في حالة استخدام Array of objects

object newEntery[] = new object[] {"Anything", "Anything", "Anything"};

myDataSet.Table["MyTable"].Rows.Add (newEntery);

لكن اذا احنا انشئنا الـ DataSet طريق الـ Wizard (وهذي الطريقه اسهل بكثير من الطريقه الاولى) زي ما شفنا في الدرس السابق فتسمى الـ DataSet الي انشئت Strong or typed DataSet

بحيث انه الـ Compiler بعد ما ينشئ الـ DataSet راح يضيف لها اسماء الجداول واسماء الاعمده لكل جدول واسماء الـ Constraints لكل جدول بطريقه اوتوماتيكيه وهذا راح يوفر علينا كثيــــــــــــر

من الوقت والجهد, خلونا نكتب الكود الي فوق بس تخيلوا انه احنا عملنا الـ DataSet عن طريق الـ Wizard , بمجرد ما تكتب اسم الـ DataSet و بعدين تكتب الـ Dot Opertator (.) الكمبيوتر راح يطلعلك اسماء الجدوال, الكود راح يكون زي كذا:

DataRow dr = myDataSet.MyTable.NewRow ();

dr["Column1"] = "Anything";

dr["Column2"] = "Anything";

dr["Column3"] = "Anything";

myDataSet.MyTable.Rows.Add (dr);

السيناريو:

على نفس الفورم الي موجود في الدرس السابق راح نضيف Group Box ونسميها enteryGroup فيها 3 Labels مكتوب عليهم ID, Name, Phone وقدام كل Label راح يكون في TextField

واسمهم idEntery, nameEntery, phoneEntery بس راح نخلي الـ enteryGroup  مفعله, وبعد كذا راح نضيف زرين داخل الـ enteryGroup واحد مكتوب عليها Submit والي راح يقوم بعملية الادخال والثاني مكتوب عليه Cancel والي راح يلغي عملية الادخال, بعد كذا راح نضيف زر للفورم (خارج الـ enteryGroup) وراح يكون مكتوب عليه New Record وهو الي راح يكون مسؤول على تفعيل الـ enteryGroup , راح يطلع الفورم تقريبا زي الي موجود في الصوره الي تحت

 

 

الحين المستخدم لما يضغط على الزر الي مكتوب عليه New Record المفروض يتم تفيعل enteryGroup و تعطيل نفسه, عشان نسوي كذا خلونا نضيف event للزر الي مكتوب علليه New Record عن طريق الضغط عليه مرتين (Double Click) وبعد كذا نقوم بكتابة الكود التالي:

 

 

اوكي, وكمان راح نضيف Action او event للزر الي مكتوب عليه Cancel بحيث انه بمجرد ما يضغط المستخدم على هذا الزر يقوم بتعطيل الـ  enteryGroup وتفعيل الزر الي مكتوب عليه NewRecord, بنفس الطريقه الي فوق نضيف الكود التالي:

 

 

الحين ما باقي علينا الا شيء واحد وهو اضافة اكشن للزر الي مكتوب عليه Submit والي راح يضيف البيان الجديد للـ DataSet الي اسمها dataSet11, الكود راح يكون زي كذا:

 

 

بس يا ليت لو تلاحظوا انه الكود تبع الادخال انا كاتبه وسط try catch clause عشان ممكن يصير خطأ معين (تكرار للمفتاح الاساسي) فبدل ما يعلق البرنامج ويصير hang up يطبع مسج مفادها انه في خطأ, المهم الحين بعمل test للبرنامج تبعي وراح اضغط على الزر الي مكتوب عليه << عشان اروح لآخر بيان وبعد كذا راح نشوف الصوره تبعها بس عشان نتأكد, شوفوا الصوره الي تحت

 

 

لحظوا الـ ID لآخر بيان هو 8 , خلون نضيف بيان جديد ونعطيه ID رقم 9 بس عشان نتأكد هل الكود تبعنا شغال ولا لا, شوفوا الصوره الي تحت

 

 

من الصوره الي فوق يظهر انه برنامجنا شغال,  طيب خلونا نشوف قاعدة البيانات الاصليه هل برنامجنا فعلا قام بتحديثها  ولا لا, خلونا نشوف الصوره الي تحت

 

 

لحظوا في الصوره الي فوق انه ما صار اي تغيير في قاعدة البيانات الاصليه, طيب اش الفايده من هذا البرنامج او الطريقه طلما انه قاعدة البيانات الاصليه ما تحدث؟

بصراحه هذي خيبة امل كبيره لكثير من الناس لانه برنامجنا في هذي الحاله هو inconsistent يعني غير محتوي او بالبلدي "ما فيه هرجه" , بس هنا يجي دور الـ Adapter.

 

الـ Adapter فيه method اسمها Update تاخذ DataSet كــ parameter , لما تستخدم الـ Update Method وترسلها DataSet الـ Adapter يشوف هل في تغيير على الـ DataSet صار بعد اخر مره صارلها Fill (التغيير يشمل اضافه او حذف او تعديل) اذا نعم راح يفتح الـ connection الي بينه وبن قاعدة البيانات الاصليه ويقوم بالـ SQL Command المناسب عشان يسوي هذا التغيير وبهذي الطريقه احنا نقدر نحل المشكله تبعنتنا , وهذي الطريقه مره سهله وتوفر وقت وجهد بحيث انه الـ Adapter هو الي راح يفتح الـ connection ويكتب اوامر الـ SQL ويسوي كل حاجه, باقي خطوه وحده

وهي وين نكتب او نستدعي الـ Update Method هل نستدعيها في كل مره احنا ندخل فيها بيان جديد ؟

الاجابه هي طبعا لا, لانه لو سوينا كذا ما صار في فايده من الـ DataSet او انه ليه ما نستغني عن الـ DataSet ونكتب برنامجنا بحيث انه احنا كل ما نبغى نضيف بيان جديد نكتب امر SQL Command ونسويله ExecuteNonQuery زي ما شفنا في الدروس السابقه.

ااحنا اساسا استخدمنا الـ Adapter والـ DataSet كله عشان نوفر وقت لانه عملية فتح الـ Connection وإغلاقه تاخذ وقت (هنا في حالتنا هذي ما راح نلاحظ التأخير الي يصير)

فاحسن طريقه او وقت نستخدم الـ Update Method هو لما نغلق البرنامج تبعنا او قبل لا يسوي البرنامج تبعنا Terminate , وعشان نسوي كذا نضيف event للفورم تبعنا واسم الـ event هي Closing وهذي تصير قبل لا يسوي البرنامج تبعنا Terminate , نقوم بتحديد الفورم ومن الـ properties نضغط على زر الـ events الي عليه رسمة رعد ومنها نعمل double click على كلمة Closing, الصوره الي تحت تبين العملية:

 

 

بعد كذا راح يفتح الـ Code Editor وهنا نضيف الكود التالي:

 

 

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

 

 

لاحظوا انه تم التعديل, كذا يكون درسنا انتهى وكمان دروس طرق ربط قواعد البيانات بلغة سي شارب انتهت والي عنده اي سؤال او استفسار يسأل ولا يستحي

اخوكم.........Robatic

Hosted by www.Geocities.ws

1