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

الثلاثاء، 23 مايو 2017

DbCommandBuilder Class

 فئة باني أوامر قاعدة البيانات
DbCommandBuilder Class
 
هذه الفئة هذه الفئة أساسية مجردة Abstract Base Class (تجب وراثتها MustInherit)، وهي ترث فئة المكون Component Class، ويمكنك استخدامها لبناء أوامر التحديث والإدراج والحذف اللازمة لنقل التغييرات من أحد جداول مجموعة البيانات DataSet إلى قاعدة البيانات.. ولكي تفعل هذه الفئة هذا، عليك ربطها بموصل البيانات، بشرط أن يحتوي موصل البيانات على أمر التحديد SELECT Command.. وتقوم هذه الفئة بالاستجابة للحدث RowUpdating الخاص بموصل البيانات، حيث تستخلص المعلومات الأساسية عن تركيب الصف من أمر التحديد SELECT Command (كاسم الجدول وأسماء الأعمدة)، وتبني الأمر المناسب لتحديث أو حذف أو إدراج السجل الذي أطلق الحدث.
ويتم ربط موصل بيانات واحد فقط بباني أوامر واحد فقط. 
وتمتلك هذه الفئة الخصائص التالية:
 
 موصل البيانات DataAdapter:
تقرأ أو تغير موصل البيانات الذي سيتم إنشاء أوامره.. ويجب أن يحقق موصل البيانات الشروط التالية:
- أن يحتوي على أمر تحديث SELECT Command.
- أن يوجد ضمن أعمدة النتيجة التي يعيدها أمر التحديد المفتاح الأساسي أو عمود متفرد Unique يميز كل صف.
- أن يعيد أمر التحديد النتائج من جدول واحد فقط.. استعلامات الربط بين أكثر من جدول مرفوضة.
وعند الإخلال بأي من هذه الشروط، سيحدث خطأ ويرفض باني الأوامر إنتاج أوامر التحديث والحذف والإدراج.. ويمكنك استدعاء الوسيلة Dispose الخاصة بباني الأوامر، لإنهاء ارتباطه بموصل البيانات، والوقوف عن استخدام الأوامر التي أنشأها.
 
 وضع جميع القيم SetAllValues:
إذا جعلت قيمتها True، ينتج باني الأوامر أمر تحديث Update يُحدّث جميع قيم السجل.. أما إذا جعلتها False، فسينتج أمر تحديث يحدّث فقط قيم الحقول التي تغيرت في مجموعة البيانات.. لاحظ أن باني الأوامر يتابع الحدث RowUpdating الخاص بموصل البيانات، ويفحص كل صف قبل تحديثه، ومن ثم ينتج استعلام التحديث المناسب لهذا الصف تبعا للتغييرات التي حدثت فيه في مجموعة البيانات.
طبعا هذا أذكى وأسرع وأقل عبئا على خادم سيكويل، لكنه قد يؤدي إلى نتائج غير متوقعة إذا كنت تحل مشاكل التوافق Concurrency Conflicts باستخدام طريقة "الأخير يكسب"، بحيث تحفظ تغييراتك مباشرة، فهذا قد يجعل قيم السجل تتكون من مزيج من تغييراتك وتغييرات مستخدم آخر.. أما إذا كنت تستخدم طابع الوقت أو تقارن كل الحقول، فلا خوف من هذه المشكلة.
 
 خيار التعارض ConflictOption:
تحدد كيف يتم إنشاء أمر التحديث UPDATE والحذف DELETE لتلافي مشاكل التطابق Concurrency Conflicts.. وتأخذ هذه الخاصية إحدى قيم المرقم ConflictOption التالية:
 
CompareAll
SearchableValues
يتم البحث عن السجل المراد تحديثه في قاعدة البيانات، بمقارنة جميع قيم الحقول العددية والنصية الصغيرة، للتأكد من أن السجل لم تدخل عليه أية تعديلات.
Compare
RowVersion
يتم البحث عن السجل المراد تحديثه في قاعدة البيانات، بمقارنة حقل الإصدار.. هذا يتطلب وجود حقل من النوع TimeStamp في الجدول.
Overwrite
Changes
يتم البحث عن السجل المراد تحديثه في قاعدة البيانات، باستخدام مفتاحه الأساسي فقط، وهذا يعني أن التغييرات الخاصة ببرنامجك سيتم حفظها في السجل لتلغي أية تغييرات أدخلها المستخدمون الآخرون.
 
 قوس الفتح QuotePrefix:
تقرأ أو تغير النص المستخدم كقوس فتح، لاستخدامه مع أسماء الجداول والأعمدة التي تحتوي على مسافات أو حروف غير مقبولة.
 
 قوس الإغلاق QuoteSuffix:
تقرأ أو تغير النص المستخدم كقوس إغلاق.
مع قواعد البيانات المألوفة، يكون قوسا الفتح والإغلاق [ ].
 
 موضع الفهرس CatalogLocation:
تقرأ أو تغير الموضع الذي سيوضع فيه اسم قاعدة البيانات، عند تكوين المسارات الكاملة لأسماء الجداول في أوامر SQL.. وهي تأخذ إحدى قيمتي المرقم CatalogLocation التاليتين:
 
Start
يوضع اسم قاعدة البيانات في بداية المسار.
End
يوضع اسم قاعدة البيانات في نهاية المسار.
 
 فاصل الفهرس CatalogSeparator:
تقرأ أو تغير النص المستخدم كفاصل بين اسم قاعدة البيانات واسم الجدول عند كتابة المسار الكامل.. المألوف أن تستخدم النقطة . كفاصل، مثل Books.Author .
 
 فاصل المخطط SchemaSeparator:
تقرأ أو تغير النص المستخدم كفاصل بين اسم المخطط Schema واسم معرف Identifier موجود في هذا المخطط.. والمألوف أن تستخدم النقطتان المتعامدتان : كفاصل، مثل: Person:CustomerName.
 
كما تملك هذه الفئة الوسائل التالية:
 
 إنعاش المخطط RefreshSchema:
تحذف أوامر التحديث والحذف والإدراج التي قام باني الأوامر ببنائها.. هذا ضروري إذا أردت أن تجعل باني الأوامر ينعش معلوماته عن موصل البيانات، حيث إن باني الأوامر يبني أوامره بعد أول عملية تحديث لقاعدة البيانات، ويستخدمها كما هي بعد هذا.. لهذا عليك استدعاء هذه الوسيلة إذا قمت بتغيير استعلام التحديد أو وقت الانتظار CommandTimeout أو كائن التعاملات Transaction الذي يستخدمه أمر التحديد، لكي يعيد باني الأوامر إنشاء أوامر التحديث والحذف والإدراج لتلائم هذه التغييرات.
 
 معرفة أمر التحديث GetUpdateCommand:
تعيد كائن الأمر DbCommand الذي تم إنتاجه لتحديث قاعدة البيانات.
وهناك صيغة ثانية لهذه الوسيلة، تستقبل معاملا منطقيا، إذا جعلته False، فسيستخدم باني الأوامر في أمر التحديث، معاملات لها الأسماء P1 و P2 و P3 وهكذا... (مثل SET Author = @P1).. وهذه هي الحالة الافتراضية في الصيغة الأولى لهذه الوسيلة.
أما إذا جعلت قيمة هذا المعامل True، فسيتم إنتاج معاملات لها نفس أسماء الأعمدة ، كلما كان هذا ممكنا (مثل SET Author = @Author).. لاحظ أن محاولة إنتاج هذه الأسماء ستسبب خطأ إلا إذا جعلت الكائن DbMetaDataColumnNames يلتزم بالشروط التالية:
1- تحديد أقصى طول ممكن لأسماء المعاملات، من خلال الخاصية ParameterNameMaxLength.
2- توضيح صيغة أسماء المعاملات، من خلال الخاصية ParameterNamePattern.
3- تحديد تنسيق العلامة المميزة للمعامل، من خلال الخاصية ParameterMarkerFormat.
 
 معرفة أمر الإدراج GetInsertCommand:
تعيد كائن الأمر DbCommand الذي تم إنتاجه لإدراج صف جديد في قاعدة البيانات.. وهي مماثلة في صيغتيها للوسيلة GetUpdateCommand.
 
 معرفة أمر الحذف GetDeleteCommand:
تعيد كائن الأمر DbCommand الذي تم إنتاجه لحذف صف من قاعدة البيانات.. وهي مماثلة في صيغتيها للوسيلة GetUpdateCommand.
 
 تقويس المعرف QuoteIdentifier:
أرسل إلى هذه الوسيلة نصا يمثل مسارا كاملا لأحد عناصر قاعدة البيانات (مثل Books.Author.ID)، لتعيد إليك نفس المسار بعد وضع كل أسماء العناصر الموجودة فيه بين قوسين (مثل [Books].[Author].[ID]).. لاحظ أن المعرف المحاط بقوسين فعلا سيتم تجاهله.
 
 إزالة تقويس المعرف UnquoteIdentifier:
أرسل إلى هذه الوسيلة نصا يمثل مسارا مقوسا لأحد عناصر قاعدة البيانات (مثل [Books].[Author].[ID])، لتعيد إليك نفس المسار بعد إزالة جميع الأقواس منه (مثل Books.Author.ID).
 
والفئات التالية ترث الفئة DbCommandBuilder:
1.   OdbcCommandBuilder Class.
2.   OleDbCommandBuilder Class.
3.   OracleCommandBuilder Class.
4.   SqlCommandBuilder Class.
 
وسنتعرف هنا فقط على الفئة SqlCommandBuilder.
 
من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:
 

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

إرسال تعليق

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

صفحة الشاعر