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

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

IDbCommand.ExecuteNonQuery


 تنفيذ بدون استعلام IDbCommand.ExecuteNonQuery:
تنفذ الأمر دون أن تعيد أية سجلات، ولكن تعيد عددا صحيحا Integer يمثل عدد السجلات التي تأثرت بتنفيذ الأمر.. ويمكنك استخدام هذه الوسيلة لتنفيذ أوامر التحديث Update والحذف Delete والإدراج Insert.

وستجد مثالا على هذه الوسيلة في الزر CREATE PROC في المشروع AccessStoredProcedure الذي عرفنا من قبل أنه ينشئ إجراء مخزنا في قاعدة بيانات الكتب المنشأة بتطبيق Access.. في هذا الزر نستخدم كائن أمر من النوع OleDbCommand للتعامل مع قاعدة بيانات Access، ونستخدم الوسيلة ExecuteNonQuery لتنفيذ استعلام SQL الذي ينشئ الإجراء المخزن في قاعدة البيانات، لأنه لا يعيد إلينا أي ناتج.

لاحظ أن كود الاتصال بقاعدة البيانات وتنفيذ الأوامر يتكرر كثيرا، وهو يبدو طويلا مع وجود تعديلات طفيفة.. لهذا سيكون من الأذكى لو جمعنا الكود المتشابه في إجراء وأرسلنا إليه المعاملات التي تناسب الاستعلام الذي ننفذه.. ولقد فعلنا هذا في المشروع DbTasks، حيث عرفنا فيه فئة اسمها MyDbConnector، وأضفنا إليها خاصية اسمها ConnectionStr تستقبل نص الاتصال، وحدث إنشاء Constuctor يستقبل نص الاتصال أيضا ويضعه في هذه الخاصية على سبيل الاختصار.. وقد عرفنا في هذه الفئة عددا من الوسائل التي تتيح لنا التعامل مع قاعدة البيانات، ومن بينها دالة اسمها ExcuteCommand.. هذه الدالة تستقبل معاملين:

-  نص الأمر CommandText الذي تريد تنفيذه.. ويمكنك أن ترسل إلى هذا المعامل استعلام SQL أو اسم إجراء مخزن، حيث سنقوم باستنتاج نوع الأمر بحيلة صغيرة، فلو كان النص يبدأ بأي من أوامر SQL مثل "insert " أو "update "... إلخ، فمعنى هذا أن نوع الأمر CommandType.Text.. لاحظ أننا وضعنا مسافة بعد اسم الكلمة، تلافيا لاحتمال أن تكون هذه الكلمة جزءا من اسم إجراء مخزن (مثل UpdateAuthors)، فنحن واثقون أن اسم الإجراء المخزن لا يحتوي على مسافات، بينما الاستعلامات تحتوي على مسافات.. غير هذا يكون نوع الأمر CommandType.StroresProcedure.

-  مصفوفة نصية ثنائية البعد String(,)، يتكون كل عنصر فيها من اسم المعامل وقيمته.. وبهذا يمكنك تمرير المعاملات مباشرة إلى الدالة، حيث سنضيف هذه المعاملات إلى مجموعة معاملات الأمر Command.Parameters.. وإذا لم يكن للأمر معاملات، فأرسل إلى المعامل الثاني للدالة Nothing.

وتستخدم هذه الدالة الوسيلة Command.ExecuteNonQuery لتنفيذ الأمر، وتعيد True إذا لم يحدث خطأ، وتعيد False إذا حدث خطأ.

وستجد مثالا على استخدام هذه الدالة في نفس المشروع، حيث وضعنا مربعي نص على النموذج لاستقبال اسم المؤلف ونبذة عنه، وعند ضغط الزر يتم تنفيذ استعلام لإضافته إلى جدول الكتب.. انظر كيف سيكون الكود في منتهى البساطة والاختصار باستخدام الفئة MyDbConnector:

Dim DbBooks As New MyDbConnector(

                                My.Settings.BooksConStr)

Dim SQL = "INSERT INTO Authors " &

                    " (Author, CountryID, About)" &

                    " VALUES (@Author, 21, @About)"

Dim Params = {{"@Author", TxtAuthor.Text.Trim},

                                                          الفئة استعلام لإضبحيلة صغيرة، فلو كان النص يبدأ بأي من الكلمات "" الذي ننفذه.

{"@About", TxtAbout.Text.Trim}}

If DbBooks.ExcuteCommand(SQL, Params) Then

    TxtAuthor.Clear()

    TxtAbout.Clear()

End If

ويمكنك استخدام الفئة MyDbConnector للتعامل مع أي قاعدة بيانات، وتنفيذ أي أمر عليها باستخدام الإجراء ExcuteCommand.. أليس هذا شيئا مريحا؟

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

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

إرسال تعليق

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

صفحة الشاعر