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

الصفحات

الأربعاء، 12 أبريل 2017

IDbDataAdapter Interface


 واجهة موصل بيانات قاعدة البيانات
IDbDataAdapter Interface
 
هذه الواجهة ترث الواجهة IDataAdapter، وهي تمد موصل البيانات بالأوامر اللازمة للتعامل مع قاعدة البيانات.
وإضافة إلى ما ترثه من الواجهة الأم، تمتلك هذه الواجهة الخصائص التالية: 

 أمر التحديد SelectCommand:
هذه الخاصية من نوع الواجهة IDbCommand، وهي تستقبل كائن الأمر الذي يحتوي على جملة التحديد SELECT التي سيستخدمها موصل البيانات للحصول على السجلات من قاعدة البيانات عند استدعائك للوسيلة Fill أو FillSchema.. ويمكن أن يحتوي أمر التحديد على مجموعة من الأوامر Batch SQL، وفي هذه الحالة يضيف موصل البيانات أكثر من جدول إلى مجموعة البيانات.
 

 أمر الإدراج InsertCommand:
هذه الخاصية من نوع الواجهة IDbCommand، وهي تستقبل كائن الأمر الذي يحتوي على جملة الإدراج INSERT التي يستخدمها موصل البيانات عند استدعاء الوسيلة Update، لإضافة السجلات الجديدة في مجموعة البيانات إلى قاعدة البيانات.

ويريك المشروع CopyAuthors كيف يمكن تعريف أمر الإدراج ومعاملاته، ووضعه في الخاصية InsertCommand، واستدعاء الوسيلة Update لاستخدامه في حفظ السجلات الجديدة من مجموعة البيانات إلى قاعدة البيانات.. هذا المشروع يستخدم استعلام الإدراج التالي:
INSERT INTO Authors
(Author, CountryID, Phone, About)
VALUES (@Author, @CountryID, @Phone, @About)
لاحظ أن معاملات أمر الإدراج مربوطة بمجموعة البيانات، لأخذ قيمها من أعمدتها مباشرة.. لقد عرفنا من قبل أن كائن المعامل Parameter Object يملك الخاصية SourceColumn التي نضع فيها اسم العمود الموجود في مجموعة البيانات الذي سنقرأ القيمة منه.. وستجد أننا أرسلنا القيمة إلى هذه الخاصية من خلال المعامل الرابع لحدث الإنشاء New عند تعريف كل معامل، كما هو موضح في الكود التالي:
InsertCmd.Parameters.AddRange(New SqlParameter( ) {
                New SqlParameter("@Author",
                         SqlDbType.NVarChar, 0, "Author"),
                New SqlParameter("@CountryID",
                         SqlDbType.SmallInt, 0, "CountryID"),
                New SqlParameter("@Phone",
                         SqlDbType.VarChar, 0, "Phone"),
                New SqlParameter("@About",
                         SqlDbType.NVarChar, 0, "About")})
لهذا لا نحتاج إلى كتابة أي كود لقراءة القيم من مجموعة البيانات، فعند استدعاء الوسيلة Update، فإنها تمر عبر كل صف من صفوف مجموعة البيانات، وتأخذ قيم أعمدته وتمررها إلى معاملات أمر الإدراج، وتنفذه. 

ملحوظة:
لإنعاش السجل المعروض في مجموعة البيانات، يمكنك استخدام جملة SELECT أخرى بعد استعلام الإدراج أو التحديث الخاص بقواعد بيانات سيكويل سيرفر، وذلك بوضع فاصلة منقوطة ; بين الأمرين.. مثلا:
INSERT INTO Authors
(Author, CountryID, Phone, About)
VALUES (@Author, @CountryID, @Phone, @About);
SELECT * FROM Authors
WHERE ID = SCOPE_IDENTITY( )
هذا مفيد في بعض الحالات.. مثلا: لو كان السجل يحتوي على عمود ترقيم تلقائي، فإن الرقم الذي ستعطيه مجموعة البيانات للسجل هو مجرد اقتراح لا تعمل قاعدة البيانات به (لهذا ليست مشكلة أن تضع فيه مجموعة البيانات 0 أو -1)، حيث تعطي قاعدة البيانات للسجل الرقم الصحيح في الترقيم عند إضافته إليها، لهذا تكون جملية SELECT مفيدة لعرض الترقيم الصحيح للسجل في برنامجك.
أما إذا لم تجد داعيا لإنعاش مجموعة البيانات، فلا تستخدم أمر التحديد.
لاحظ أن الدالة SCOPE_IDENTITY تعيد آخر معرف تم توليده في نطاق التنفيذ الحالي، وهو بالطبع معرف السجل الذي أضفناه للتو.. ولا ينصح باستخدام الدالة @@IDENTITY لأنها قد تتأثر بعوامل أخرى في قاعدة البيانات مثل المنبهات Triggers، ما يجعلها تعيد معرفا غير المعرف الخاص بالسجل الذي أضفته.


 أمر الحذف DeleteCommand:
هذه الخاصية من نوع الواجهة IDbCommand، وهي تستقبل كائن الأمر الذي يحتوي على جملة الحذف DELETE التي يستخدمها موصل البيانات عند استدعاء الوسيلة Update، لحذف السجلات من قاعدة البيانات إذا كانت قد حذفت من مجموعة البيانات.  

 أمر التحديث UpdateCommand:
هذه الخاصية من نوع الواجهة IDbCommand، وهي تستقبل كائن الأمر الذي يحتوي على جملة التحديث UPDATE التي يستخدمها موصل البيانات عند استدعاء الوسيلة Update، لنقل التغييرات من مجموعة البيانات إلى قاعدة البيانات.
 

ملحوظة:
إذا كانت مجموعة البيانات تحتوي على مفتاح أساسي، وكنت قد وضعت أمر التحديد في الخاصية SelectCommand، فلست مجبرا في هذه الحالة على إنشاء أوامر الحذف والإدراج والتحديث بنفسك، فموصل البيانات يستطيع إنتاج هذه الأوامر آليا عند استدعاء الوسيلة Update الخاصة به، وهو يستخدم لفعل هذا فئات بناء الأوامر CommandBuilders التي سنتعرف عليها لاحقا في هذا الفصل.
 
من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


 

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

إرسال تعليق

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