المتابعون للمدونة

الأربعاء، 25 أكتوبر 2017

Typed DataSet

مجموعة البيانات محددة النوع Typed DataSet:
رأينا في المعالج السحري كيف قامت دوت نت بإنشاء فئة اسمها DataSet1 آليا اعتمادا على المخطط DataSet1.xsd.. وتسمى هذه الفئة باسم مجموعة البيانات محددة النوع
Typed DataSet، لأنها تقوم بتعريف أنواع خاصة لجداول وصفوف مجموعة البيانات، وتسمح لك بالتعامل مع الجداول والأعمدة بأسمائها مباشرة.. لكي يحدث هذا، تقوم هذه الفئة بتعريف العديد من العناصر.. ولو فتحت الملف DataSet1.Designer.vb في المشروع TypedDataSet فستجد فيه تعريف الفئة DataSet1، وستجد فيها العناصر التالية:
1- فئة خاصة لكل صف في كل جدول في مجموعة البيانات.. أسماء هذه الفئات على الصيغة XRow، حيث X هو اسم الجدول.
وترث فئة الصف فئة صف البيانات الأم DataRow، وبداخل هذه الفئة يتم تعريف خاصية باسم كل عمود من أعمدة الجدول، تعيد قيمة الخانة الموجودة في هذا العمود في هذا الصف.. فمثلا، ستجد داخل الفئة DataSet1 فئة اسمها AuthorsRow تمثل صف البيانات في جدول المؤلفين، وستجد بداخلها خاصيتين هما: Author و Book تعيدان اسم المؤلف واسم الكتاب في الصف الحالي.
2- فئة لكل جدول موجود في مجموعة البيانات.. هذه الفئات تحمل أسماء على الصيغة XDataTable، حيث X هو اسم الجدول.
وترث فئات الجداول الفئة عامة النوع TypedTableBase(Of T) والتي ترث بدورها فئة الجدول DataTable، حيث T هو نوع صفوف الجدول.
فمثلا، ستجد داخل الفئة DataSet1 فئة اسمها AuthorsDataTable تمثل جدول المؤلفين، وهي ترث الفئة TypedTableBase(Of AuthorsRow).
وبداخل فئة الجدول، يتم تعريف خصائص للتعامل مع كل عمود بالجدول، وهي تعيد كائنات من نوع فئة العمود DataColumn Class.. فمثلا، ستجد في الجدول AuthorsDataTable الخاصيتين AuthorColumn و BookColumn اللتين تتيحان لك التعامل مع عمودي المؤلفين والكتب.
كما يتم تعريف عدة أحداث لفئة الجدول إضافة إلى ما ترثه من الفئة DataTable، وهي:
- الصف يتغير XRowChanging.
- الصف تغير XRowChanged.
- الصف يُحذف XRowDeleting.
- الصف حُذف XRowDeleted.
حيث X هو اسم الجدول.. فمثلا: في جدول المؤلفين يتم تعريف الأحداث التالية:
AuthorsRowChanging, AuthorsRowChanged,
AuthorsRowDeleting, AuthorsRowDeleted.
3- عدة خصائص على مستوى الفئة DataSet1 تحمل أسماء جداول مجموعة البيانات، لتتيح لك الحصول على كائن من نوع فئة هذا الجدول.. فمثلا، ستجد في الفئة DataSet1 خاصية اسمها Authors، تعيد نسخة من الفئة AuthorsDataTable، ويمكنك من خلالها التعامل مع جدول المؤلفين.
لاحظ أن هناك تشابها كبيرا بين فئات مجموعة البيانات محددة النوع وبين الكينوانات في Entity Framework و LinQ To SQL.
لكن لماذا كل هذا؟.. وبم تفيدنا المجموعة محددة النوع يا ترى؟
انظر مثلا إلى هذه الجملة التي تقرأ اسم المؤلف الموجود في الصفّ الثالث في جدول المؤلفين:
DataSet11.Tables("Authors").Rows(2).Item("Author")
واضح طبعا أنها جملة طويلة تدفع إلى الاستياء.. فما رأيك إذن في الجملة التالية:
DataSet11.Authors(2).Author
إنّ الجملتين ـ ويا للعجب ـ متكافئتان، وإن كانت الأولى عامّة تستخدم خصائص فئة مجموعة البيانات الأم DataSet Class، بينما الثانية خاصّة، تستخدم خصائص مجموعة البيانات DataSet1 محددة النوع.. لاحظ أن الجملة الثانية تمنحك الميزات التالية:
1- مختصرة وواضحة ومفهومة.
2- أقل عرضة للخطأ.. ففي الجملة الأولى (الطويلة) هناك احتمالان للخطأ، أثناء كتابتك لاسمي الجدول Authors والعمود Author، لأنك تكتبهما يدويا كنصوص، ولا يتم اكتشاف أي خطأ فيهما إلا أثناء تشغيل البرنامج.. أما في الجملة الثانية (القصيرة)، فإنك تتعامل مع خصائص معرفة سابقا في الفئة DataSet1، ولن يقبل محرر الكود أي خطأ في أسمائها، ما يعني انعدام أي فرصة للخطأ.
3- لا تحتاج عند كتابة الجملة الثانية إلى تذكر أسماء الجداول والأعمدة بنفسك، وهو أمر تتضح أهميته في قواعد البيانات الضخمة التي تحتوي على عشرات الجداول، التي يحتوي كل منها على عشرات الأعمدة، ما يعني أنك ستضيع الكثير من الوقت لو استخدمت مجموعة بيانات عادية، لأنك ستضطر إلى العودة إلى قاعدة البيانات كثيرا لتذكر أسماء عناصرها.. بينما مجموعة البيانات محددة النوع تجعل الحياة جنة، لأن الاستشعار الذكي IntilliSense سيعرض لك قائمة الأسماء بمجرد كتابة النقطة . لتختار منها اسم الجدول أو العمود الذي تريد التعامل معه.
كل هذا يوضح لك كيف تختصر وتسهل مجموعة البيانات محددة النوع كتابة الكود بشكل كبير.
والمشروع DataSetContents يريك كيف يمكن عرض كل جداول وعلاقات وبيانات مجموعة البيانات محددة النوع، بالطريقة الموضحة في الصورة.


ملحوظة:
يمكنك استعارة مخطط XML من مشروع آخر، وإنشاء مجموعة بيانات محددة النوع بناء عليه.. لفعل هذا، اتبع الخطوات التالية:
- أنشئ مشروعا جديدا.
- من القائمة العلوية Project، اضغط الأمر Add Existing Item.
- استخدم مربع حوار فتح ملف للوصل إلى مجلد المشروع DataSetContents، واختر الملف DsAuthorsBooks.xsd.. سيضاف هذا الملف إلى المشروع.
- اعرض النموذج، وافتح صندوق الأدوات، وأضف مجموعة بيانات إلى النموذج.. وفي مربع الحوار الذي سيظهر اختر Typed DataSet.. ستجد أن القائمة المنسدلة تعرض العنصر X.DsAuthorsBooks، حيث X هو اسم المشروع.. اضغط OK.
- ستضاف مجموعة بيانات اسمها DsAuthorsBooks1 إلى صينية المكونات.. يمكنك استخدام نافذة الخصائص لتغيير اسمها إلى أي اسم مناسب، وليكن Ds.
- اضغط هذه المجموعة بزر الفأرة الأيمن، ومن القائمة الموضعية اضغط الأمر Edit In DataSet Designer.. سيؤدي هذا إلى فتح مخطط XML، وستجد فيه مخطط جدول المؤلفين، ومخطط جدول الكتب، والعلاقة بينهما.

 من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر