تنفيذ قارئ 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
ليست هناك تعليقات:
إرسال تعليق
ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.