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

الثلاثاء، 10 يناير 2017

IDbCommand.ExecuteReader


 تنفيذ قارئ IDbCommand.ExecuteReader:
تنفذ الأمر، وتعيد كائنا من النوع IDataReader، حيث يمكنك استخدامه لقراءة النتيجة سجلا تلو سجلّ.. وسنتعرف على قارئ البيانات لاحقا.

وستجد مثالا على هذه الوسيلة في المشروع AuthorBooks_Reader.

ولهذه الوسيلة صيغة ثانية، تستقبل معاملا من نوع المرقم CommandBehavior، الذي يحدد سلوك قارئ البيانات، كالتالي:

 

Default
السلوك العادي، حيث يمكن أن يؤدي تنفيذ الأمر إلى الحصول على أكثر من مجموعة من مجموعات النتائج Result Sets (كما يحدث في حالة تنفيذ أكثر من جملة SQL من داخل إجراء مخزن).. هذا مكافئ لاستدعاء الوسيلة ExecuteReader بدون معاملات.
SingleResult
يؤدي تنفيذ الاستعلام إلى الحصول على مجموعة نتائج واحدة فقط.
SchemaOnly
يؤدي تنفيذ الاستعلام إلى الحصول على معلومات الأعمدة فقط بدون أي سجلات.. هذا يعني الحصول على جدول فارغ به أسماء الأعمدة فقط.. هذا مماثل لاستخدام مزود سيكويل للخيار:
SET FMTONLY ON
KeyInfo
يؤدي تنفيذ الاستعلام إلى الحصول على معلومات الأعمدة والمفتاح الأساسي Primary Key.
SingleRow
يؤدي تنفيذ الاستعلام إلى الحصول على سجل واحد فقط، ولو كان الاستعلام يحصل على أكثر من مجموعة من النتائج، فسيكون بكل مجموعة منها سجلا واحدا فقط.. استخدم هذا الاختيار عندما تحتاج إلى أو سجل فقط، فهذا يؤدي إلى تحسين أداء وسرعة البرنامج.
Sequential
Access
قراءة تتابعية.. هذا مفيد للقراءة من الأعمدة التي تحوي قدرا ضخما من البيانات، فبدلا من طلبها كلها من الخادم، يتم طلب أجزاء من البيانات فقط تبعا لاحتياجك.. لاحظ الآتي:
- يجب عليك قراءة قيم الحقول بنفس ترتيبها في الاستعلام، لأنك لو قرأت أي حقل، فلن تستطيع قراءة الحقل السابق له مرة أخرى، فنحن هنا نقرأ البيانات تتابعيا، أي بالترتيب.
- استخدم الوسيلة GetValue لقراءة القيمة الموجودة في أي حقل كاملة.
- استخدام الوسيلة GetBytes الخاصة بقارئ البيانات لقراءة أجزاء من الحقل الذي يحتوي على بيانات ثنائية ضخمة، مثل image و varbinary(MAX).
- استخدام الوسيلة GetChars الخاصة بقارئ البيانات لقراءة أجزاء من الحقل الذي يحتوي على نصوص ضخمة، مثل text و ntext و varchar(MAX)
و
nvarchar(MAX).
والمشروع ReadLargeData يقرأ الصور الخاصة بشعار كل ناشر من الجدول Publishers، ويحفظها في ملف على الجهاز.. ونظرا لأن الصورة قد تكون ضخمة، فقد استخدمنا هذا الخيار لنقرأ البيانات تتابعيا.. ويريك هذا المشروع أن هذه الطريقة تصلح للقراءة من الحقل Logo الذي نوعه image، وتصلح أيضا للقراءة من الحقل Logo2 الذي نوعه varbinary(MAX).
Close
Connection
يتم إغلاق الاتصال Connection مع قاعدة البيانات أليا، بمجرد إغلاق قارئ البيانات.

 

ويمكنك استخدام أكثر من قيمة من هذه القيم، بربطها معا باستخدام المعامل Or.

وقد أضفنا وسيلة اسمها GetReader إلى الفئة MyDbConnector في المشروع DbTasks، مهمتها تنفيذ استعلام باستخدام الوسيلة ExecuteReader وإعادة قارئ البيانات.. لاحظ أنك لو أغلقت الاتصال في نهاية هذه الوسيلة فسيحدث خطأ عند محاولتك استخدام قارئ البيانات الذي أعادته إليك، لأن الاتصال الذي يستخدمه قد تم إغلاقه.. لهذا عليك عدم إغلاق الاتصال، وإرسال القيمة CommandBehavior.CloseConnection إلى معامل الوسيلة ExecuteReader لجعل قارئ البيانات يغلق الاتصال بنفسه عندما يتم إغلاقه.. وقد جعلنا للوسيلة GetReader معاملا اختياريا اسمه Sequential إذا جعلته True فستحصل على قارئ بيانات تتابعي لاستخدامه في قراءة البيانات الضخمة على أجزاء، والقيمة الافتراضية لهذا المعامل هي False لتحصل على قارئ بيانات عادي.

وستجد مثالا لاستخدام هذه الوسيلة في نفس المشروع في زر "الكتب".. هذا الزر يعرض كتب المؤلف الذي كتبت اسمه في مربع النص العلوي.

للمزيد من التفاصيل، انظر الفئة IDbCommand

 

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

إرسال تعليق

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

صفحة الشاعر