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

الجمعة، 3 مارس 2017

واجهة قارئ البيانات IDataReader Interface


 واجهة قارئ البيانات IDataReader Interface 

ترث هذه الواجهة كلا من الواجهتين IDisposable و IDataRecord.
وإضافة إلى ما ترثه من خصائص، تمتلك هذه الواجهة الخصائص الجديدة التالية: 

* العمق Depth:
تعيد رقما يمثل عمق الجدول الحالي، إذا كانت النتيجة تحتوي على جداول متداخلة (خانات بها جداول، بها خانات بها جداول... إلخ)، مع ملاحظة أن الجدول الخارجي يكون عمقه صفرا، وأول جدول داخلي عمقه 1 ... وهكذا. 

* هل هو مغلق IsClosed:
تعيد True إذا تم إغلاق قارئ البيانات. 

* السجلات المتأثرة RecordsAffected:
تعيد عدد الصفوف التي تأثرت بأوامر الإضافة أو التحديث أو الحذف.. وتعيد هذه الوسيلة 0 إذا لم تتأثر أية سجلات أو فشل تنفيذ الاستعلام، وتعيد -1 إذا كان الاستعلام يستخدم الأمر SELECT.
لاحظ أن هذه الخاصية لا تعطيك القيمة الصحيحة إلا بعد إغلاق قارئ البيانات، لهذا عليك أن تتأكد أولا أن للخاصية IsClosed القيمة True، أو تستخدم الخاصة RecordsAffected بعد استخدام الوسيلة Close. 

كما تمتلك هذه الواجهة هذه الوسائل الجديدة: 

 قراءة Read:
تجعل قارئ البيانات ينتقل إلى السجل التالي، وتعيد True.. أما إذا كان السجل الحالي هو آخر سجل ولا يوجد سجل تال، فإنها تعيد False، وعليك التوقف عن القراء في هذه الحالة، وإلا حدث خطأ.
لاحظ أن قارئ البيانات يشير مبدئيا إلى السجل رقم -1، أي أنه يشير إلى السجل السابق لأول سجل، وهذا سيجعل محاولة القراءة تسبب خطأ في البرنامج، حيث ستخبرك رسالة الخطأ أن هذه محاولة غير مسموح بها للقراءة بينما لا توجد بيانات حاليا:
Invalid attempt to read when no data is present.
لهذا عليك استدعاء الوسيلة Read أولا للانتقال إلى أول سجل وقراءته، ثم الاستمرار في استدعائها إلى أن تعيد False، وذلك على الصيغة التالية:
Do While Reader.Read
       ' الكود اللازم لقراءة السجل الحالي
Loop 

 النتيجة التالية NextResult:
عند استخدام كائن الأمر لتنفيذ أكثر من جملة SQL، أو تنفيذ إجراء مخزن يعيد أكثر من نتيجة، فإن قارئ البيانات يشير مبدئيا إلى أول نتيجة، وعليك بعد قراءة كل سجلاتها أن تستخدم هذه الوسيلة لجعل قارئ البيانات يشير إلى النتيجة التالية.. وتعيد هذه الوسيلة True إذا وجدت نتيجة تالية، لهذا عليك أن تستمر في استدعائها إلى أن تعيد False، وذلك على الصيغة التالية:
Do
    Do While Reader.Read
           ' الكود اللازم لقراءة السجل الحالي
    Loop
Loop While Reader.NextResult 

 قراءة جدول المخطط GetSchemaTable:
تعيد كائن جدول DataTable فارغا يحتوي على مخطط النتيجة التي يتعامل معها قارئ البيانات.. وسنتعرف على كائن الجدول لاحقا.
لاحظ أن المخطط يبحتوي على اسماء الأعمدة وأنواع بياناتها وأحجامها.. ويمكنك أن ترى هذا المخطط بشكل عملي في المشروع SchemaTable.. في هذا المشروع استخدمنا قارئ بيانات ليحمل جدول المؤلفين، واستخدمنا الوسيلة GetSchemaTable للحصول على مخطط جدول المؤلفين، وعرضناه في جدول عرض البيانات DataGridView الذي سنتعرف عليه بالتفصيل في فصل لاحق. 

 إغلاق Close:
تغلق قارئ البيانات.. هذا ضروري لتحرير كائن الاتصال المرتبط بقارئ البيانات، لأنك لن تستطيع استخدام كائن الاتصال في أي عملية أخرى طالما كان قارئ البيانات يستخدمه.
وكما ذكرنا من قبل، لو أنشأت قارئ البيانات باستخدام الوسيلة ExecuteReader بالصيغة التالية (حيث Cmd هو اسم كائن الأمر):
Dim Dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection)
فإن قارئ البيانات Dr سيقوم بإغلاق الاتصال بقاعدة البيانات تلقائيا بمجرد استدعاء الوسيلة Close. 

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

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

إرسال تعليق

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

صفحة الشاعر