هذا درس يعتبر عمليا نوعا ما حيث سأكتب مثالين
مستخدما ما درسناه في مواضيع ال ADO.NET و هي ال DataReader و ال
DataSet بعد أن أشرح نبذة عن برنامج MS Web Matrix .
هذا
البرنامج MS Web Matrix هو إصدارة من شركة Microsoft للعمل كمحرر
لتقنية الدوت نت و يجب من أجل تثبيته قبلا تثبيت ال Dot Net
Framework الموجودة ضمن أدوات ال SDK التي تقدمها ميكروسوفت
للمبرمجين من خلال موقعها على الشبكة أو إسطوانات مدمجة و يمكن
الحصول على محرر ال MS Webmatrix من الموقع الرسمي لشركة
ميكروسوفت http://www.microsoft.com/و هذه صورة المحرر
:
عند تشغيل المحرر سوف تظهر لنا
شاشة كالتالي :
يوجد بالأسفل مربع نص مكتوب بجانبه
Location. سنقوم بتغيير المسار و لنجعله c:\dotnet و من ثم نغير
اسم الملف بجانب ال File Name إلى Default.aspx أو أي إسم نريده
و لننتبه أن الإمتداد للملف يجب أن يكون aspx ثم نختار اللغة
التي سنبرمج بها وأنا هنا إخترت ال #C.
سوف تظهر لنا
واجهة للعمل فارغة و بها شريط بالأسفل كالموضح بالصورة
هنا
بالعادة أنا أختار All كي تظهر لي كل شيء
مكتوب سواء HTML أو الأكواد المكتوبة برمجيا. سنختار معا
الإختيار All و ستظهر لنا شاشة كهذه تماما :
و نرى فيها باللون الأصفر بالأعلى وجود
موجه Directive يحدد اللغة التي سنكتب بها و هنا مكتوبة #C و
بالأسفل سنرى وسمين Tags رئيسيين واحد لكتابة الأكواد Scripts و
الثاني لعناصر ال HTML.
سوف نذهب للوسم Script و نكتب
به كودا بسيطا للغاية يظهر مسار الصفحة التي نحن بها و التي
أسميتها أنا delete.aspx كما هو بالشكل التالي :
ليس مهما أن تكتب الكود و لكن كي أريكم
كيف تصبح الشاشة عند كتابة الأكواد. بعد ذلك نضغط على F5 كي
يتم تنفيذ الكود و ستظهر لنا شاشة صغيرة تسألنا عن رقم المنفذ
Port في الجهاز و الذي من خلاله سوف يتم تنفيذ الكود و عرضه .
اتركها كما هي 8080 و إضغط على موافق .
ستفتح صفحة متصفح
جديدة و ستظهر النتيجة الأخيرة على المتصف كالتالي :
الان سنبدأ العمل بأيدينا حيث سنتوجه
للقرص الصلب C و نقوم بعمل مجلد اسمه dotnet و نضع به قاعدة
بيانات باسم db من نوع أكسيس بها جدول واحد إسمه Categories و به
3 حقول كالتالي :
1.id : و هو المفتاح الوحيد PrimaryKey
من نوع AutoNumber 2.Category : من نوع Text 3.Active : من
نوع Boolean و هي بالأكسيس Yes/No
نقوم بكتابة عدد من
الأقسام Categories في الجدول ثم نحفظ البيانات و نغلق ال MS
Access و نتوجه للعمل برمجيا مع ال MS WebMatrix.
سوف
نقوم بتحديد المجلد الذي سنعمل به عند فتح المحرر و قلنا سيكون
dotnet الموجود على القرص الصلب C و نكون صفحة جديدة بإسم
default.aspx .
سنستفيد مما تعلمناه في الدروس السابقة في
قسم ال ADO.NET و سنكتب هذا المثال عن طريق ال DataSet و يمكنك
مراجعة الدرس من أجل المزيد و ها هو المثال :
void
Page_Load() { string
prov="Provider=Microsoft.Jet.OleDb.4.0;Data Source=" +
Server.MapPath("db.mdb"); string SQL="SELECT * FROM
Categories where active=True"; OleDbConnection cn =
new OleDbConnection(prov); OleDbDataAdapter da = new
OleDbDataAdapter(SQL,cn); DataSet ds = new
DataSet();
cn.Open();
da.Fill(ds,"categories"); int
ttlRecords =
ds.Tables["categories"].Rows.Count;
كما نرى قمنا
بإدراج NameSpaces من أجل التعامل مع البيانات و استخدمنا
System.Data لأنها تحوي على ال DataSet و استخدمنا ال
DataAdapter مثلا والذي يستوجب تضمين system.Data.OleDb حيث
سنتعامل مع قاعدة بيانات أكسيس. في المثال التالي توضيح
للموجهات :
نلاحظ أنه في أول سطر
قمت بإضافة Debug و جعلت قيمتها True و الهدف من ذلك الحصول على
نوعية الخطأ عند حدوثه في مرحلة التنفيذ Compilation
.
بعد ذلك قمت بكتابة الحدث PageLoad كالتالي :
void
Page_Load() { }
و بدونه لن تعمل
الصفحة من حيث ترجمة الأكواد لو كتبناها مباشرة.
بعد
ذلك كتبنا الكود الخاص بالإتصال Connection وال DataAdapter و ال
dataset كما هو موضح هنا :
string
prov="Provider=Microsoft.Jet.OleDb.4.0;Data Source=" +
Server.MapPath("db.mdb"); string SQL="SELECT * FROM
Categories where active=True"; OleDbConnection cn =
new OleDbConnection(prov); OleDbDataAdapter da = new
OleDbDataAdapter(SQL,cn); DataSet ds = new
DataSet();
نرى أننا عرفنا متغير
نصي String يحمل الإسم prov ليحمل بيانات المزود للبيانات و هي
قاعدة بيانات أكسيس ذات الإسم db.mdb ثم عرفنا متغير نصي أخر SQL
به جملة الإستعلام الخاصة بالتنفيذ بعدها عرفنا كائن الإتصال و
مررنا له بيانات المزود ثم أنشأنا DataAdapter و حددنا له جملة
الإستعلام و الإتصال و بعدها أنشأنا ال DataSet لتكون جاهزة
للتعبئة بالبيانات.
قلنا يلزم لتعبئة ال DataSet إستدعاء
الطريقة Fill الخاصة بال DataAdapter و هذا ما فعلناه هنا
:
cn.Open();
da.Fill(ds,"categories"); int
ttlRecords =
ds.Tables["categories"].Rows.Count;
من أجل قليل من
التوضيح قمت بتعريف متغير Object أسميته CatName داخل الدوارة
لأنه سوف يتغير في كل مرة أي خلال الإنتقال بين السجلات و هو
يحوي محتوى الحقل Category في السجل و سيكون الناتج على هذا
الشكل :
The as4web
Library has : ( 5 ) Categories. 1- Category :
ASP 2- Category : VB.NET 3- Category :
C#.NET 4- Category : ADO.NET 5- Category :
ASP.NET
بهذا
أكون إنتهيت من أول مثال عملي و كان باستخدام ال DataSet
.
مثال أخر :
سوف نقوم بعمل نفس ما قمنا به أي
عرض الأقسام كما في الطريقة السابقة و لكن باستخدام ال
dataReader و الذي يفضل إستخدامه في حالة العرض بسبب سرعته
مقارنة بما سبق. ها هو الكود :