أهم أقسام المدونة

الصفحات

السبت، 8 أبريل 2017

IDataAdapter.Fill


 ملء IDataAdapter.Fill:

أرسل إلى هذه الوسيلة كائن مجموعة البيانات DataSet التي تريد ملأها بالجداول والسجلات الناتجة من تنفيذ أمر التحديد SELECT الخاص بموصل البيانات.. وإذا كانت مجموعة البيانات تحتوي على السجلات فعلا، فسيحدث أحد الاحتمالين التاليين:

1- إذا كان هناك مفتاح أساسي Primary Key أو قيد تفرد Unique Constraint لسجلات مجموعة البيانات، فسيتم إنعاشها من جديد بأحدث قيم موجودة في قاعدة البيانات.

2- إذا لم يكن هناك ما يميز كل سجل ويمنع تكراره، فستضاف السجلات إلى مجموعة البيانات مرة أخرى، وقد يجعلها هذا مكررة!

وتعيد هذه الوسيلة عدد السجلات التي تمت إضافتها أو تحديثها.

لاحظ أنك لا تحتاج إلى فتح الاتصال مع قاعدة البيانات أولا، فهذه الوسيلة تقوم بفتحه إن كان مغلقا ثم تعيد إغلاقه.. أما لو كان الاتصال مفتوحا قبل استدعاء هذه الوسيلة، فستستخدمه ثم تتركه مفتوحا كما هو.

وتتم تسمية كل جدول يضاف إلى مجموعة البيانات تبعا لخريطة الجدول Table Mapping إن وجدت.. فإن لم توجد هذه الخريطة، تستخدم قواعد التسمية التالية:

1- إذا كان أمر التحديد يعيد سجلات جدول واحد فقط، فإنها تضاف في جدول يسمى Table.

2- إذا كان أمر التحديد ينفذ أكثر من استعلام ويعيد سجلات أكثر من جدول، فإن كل نتيجة منها توضع في جدول مستقل، ويتم تسمية هذه الجداول بالترتيب Table و Table1 و Table2... وهكذا.. لاحظ أن حدوث أي خطأ في أي استعلام، سيمنع تنفيذ الاستعلامات التالية له ولن توضع باقي النتائج في مجموعة البيانات.

3- يمكنك استخدام أكثر من موصل بيانات لملء نفس مجموعة البيانات بالجداول.. في هذه الحالة سيضيف موصل البيانات الأول جدولا اسمه Table، وسيحاول موصل البيانات الثاني أن يضيف جدولا اسمه Table أيضا، لكن نظرا لأنه موجود، فسترفضه مجموعة البيانات ولن تتم إضافته، لكن لن يحدث خطأ في البرنامج!.. هذا يوضح لك ضرورة استخدام خريطة الجداول لتسمية كل من الجدولين باسمين مختلفين لحل هذه المشكلة.

4- يسمى كل عمود في مجموعة البيانات، بنفس اسمه في الجدول الأصلي في قاعدة البيانات.

5- إذا كانت النتيجة تحتوي على أكثر من عمود بنفس الاسم (بسبب استخدام استعلام يجمعها من أكثر من جدول من قاعدة البيانات) فإنها توضع في الجدول بعد إضافة الأرقام (1، 2، 3 ... ) إلى نهاية اسم العمود لمنع التشابه.

6- إذا كانت بعض الأعمدة بدون أسماء (لأنها ناتجة عن دوال تجميع مثلا) فإنها تعطى الأسماء الافتراضية Column1 و Column2 و Column3... وهكذا.

ويجب عليك ألا تضيف إلى مجموعة البيانات جداول أو أعمدة خاصة بك وتسميها بهذه الأسماء الافتراضية، كي لا يحدث أي تعارض أو خطأ بسببها.

وستجد مثالا على استخدام الوسيلة Fill في المشروع DataGridViewAuthorBooks.. في هذا المشروع نستتخدم موصل بيانات اسمه DAAuthors لتحميل سجلات المؤلفين من قاعدة البيانات، كما نستخدم موصل بيانات اسمه DABooks لتحميل سجلات الكتب من قاعدة البيانات.. ولملء مجموعة بيانات اسمها Ds بسجلات المؤلفين والكتب، نستخدم الكود التالي في حدث تحميل النموذج Form1_Load:
DAAuthors.Fill(Ds)
DABooks.Fill(Ds) 

للمزيد من التفاصيل انظر الواجهة IDataAdapter.

 

 

 

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

إرسال تعليق

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