تحديث IDataAdapter.Update:
أرسل إلى هذه الوسيلة كائن مجموعة البيانات DataSet التي تريد أن تنقل التغييرات التي حدثت على سجلاتها إلى قاعدة
البيانات.. وتعيد هذه الوسيلة عدد السجلات التي نجح تحديثها في قاعدة البيانات.
وتستخدم هذه الوسيلة أوامر الإضافة والحذف
والتحديث الخاصة بموصل البيانات، لنقل التغييرات من مجموعة البيانات إلى قاعدة
البيانات، تبعا للتغيير الذي حدث لكل سجل.. ويحدث خطأ في البرنامج، إذا لم يوفر
موصل البيانات الأمر المطلوب من هذه الأوامر.
لاحظ أن هذه الوسيلة ذكية، فهي تمر عبر كل سجل
في مجموعة البيانات، وترى إن كان هناك أي تغيير قد حدث لهذا السجل، ومن ثم تستخدم
الأمر المناسب لإرسال هذا التغيير إلى مجموعة البيانات.. أما السجلات التي لم يحدث
بها أي تغيير، فيتم تجاهلها.. وبهذا لا تضيع هذه الوسيلة أي وقت في محاولة حفظ
سجلات لم يحدث فيها تغيير.. لذا فأنت لا تحتاج إلى القيام بأية خطوات خاصة لتحسين
وظيفة هذه الوسيلة.
لكن، لو كانت مجموعة البيانات تحتوي على أكثر من
جدول، فأيها يا ترى سيتم تحديثه؟
يحدد هذا موصل البيانات الذي تستخدمه.. فمثلا:
لو استخدمت موصل بيانات لملء مجموعة البيانات بجدول المؤلفين، فإن الوسيلة Update الخاصة به ستتعامل مع سجلات جدول المؤلفين.. ولو استخدمت موصل
بيانات لملء مجموعة البيانات بجدول الكتب، فإن الوسيلة Update الخاصة به ستتعامل مع سجلات جدول الكتب.. لهذا تحتاج الجملتين
التاليتين لحفظ التغييرات:
DaAuthors.Update(Ds)
DaBooks.Update(Ds)
لاحظ أن هذا الكود صحيح ولكنه قد يسببب مشاكل في
بعض الحالات، والأفضل أن تحاول تحديث الجدول الفرعي قبل الجدول الرئيسي، فلو كنت
حذفت مؤلفا وكتبه، فإن محاولة تحديث جدول المؤلفين أولا ستحاول حذف سجل هذا
المؤلف، وهذا سيسبب خطأ إذا كنت فرضت قيد المفتاح الفرعي Foreign Key
Constraint، لأن كتب هذا المؤلف
ستشير إلى مؤلف غير موجود.. بينما لو عكست العملية وحدثت جدول الكتب أولا، فسيتم
حذف كتب المؤلف بلا مشاكل، ومن ثم يتم حذف المؤلف نفسه عند تحديث جدول المؤلفين..
لهذا عليك استخدام الكود التالي في عملية التحديث:
DaBooks.Update(Ds)
DaAuthors.Update(Ds)
وهذا هو الكود الذي استخدمناه في الزر "حفظ
في قاعدة البيانات" في المشروع DataSetSample.
ليست هناك تعليقات:
إرسال تعليق
ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.