الرئيسية > تقنية عامة > استخدام Parameters في ADO.NET لتبادل البيانات مع قاعدة البيانات – الجزء الأول

استخدام Parameters في ADO.NET لتبادل البيانات مع قاعدة البيانات – الجزء الأول

سبتمبر 19, 2008 أضف تعليقاً Go to comments

السلام عليكم ورحمه الله وبركاته
سنتكلم اليوم عن موضوع مهم في قواعد البيانات والتعامل معها … سنتكلم عن الكائن Parameters التابع لأي فئة Command في اي فئة تتبع فضاء الأسماء Data سواء كانت OleDB او SQL او Oracle … او غيرها من من الفئات والكائنات .
مقدمة :
في أي تطبيق يعتمد على قواعد البيانات ، تبرز أهميه ارسال الباراميترات Parameters الى قاعدة البيانات ، وغالبا ما يتم ذلك عن طريق جمل الإستعلام SQL Statements حتى وقت كتابة هذه المقالة ( قريبا سنستخدم Linqمع VS2008 ) ومنهم من يفضل حفظ الاستعلاما في قاعدة البيانات والاكتفاء بمخاطبتها وارسال الباراميترات اليها واستقبال نواتجها على التطبيق .

 

نستخدم الباراميترات في اغلب الحالات لعميات مختلفه ، كالبحث ، والمعايره من الجداول والاستعلامات الموجوده ، فمثلا الكود التالي يقوم بالبحث في الجدول Products واظهار الحقول ProductID و ProductName بشرط ان تكون الـ ProductName تبدأ بقيمه نصيه معينه يحددها المستخدم بكتابتها في مربع النص TextBox1 :

Dim sql As String = "SELECT ProductID, ProductName FROM Products WHERE ProductName Like ‘" & TextBox1.Text & "%’"

Dim cmd As New SqlCommand(sql, conn)
Dim ds As New DataSet
Dim da As New SqlDataAdapter(cmd)
debug.WriteLine(sql)    ‘Lets us see the sql just before it is executed!
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
‘DataBind   ‘Uncomment this line if a web application

ليس البحث وحده كما ذكرنا ، بل ايضا اضافه وحذف البيانات وتعديلها من قاعد البيانات خصوصا في الوضع المنفصل Disconnected Mode ، لذلك فهي جزء اساسي من تطبيقات قواعد البيانات والتطبيقات الاخرى المسانده لها .
الكائن Parameter :
تقدم لك ADO.NET الكائن Parameter التابع لأي كائن أمر Connection ، هذا الكائن وظيفته ارسال البيانات الى قواعد البيانات في الاستعلامات ، سواء تلك الاستعلامات المكتوبه في تطبيقك مباشره بوساطه جمله استعلام SQL او الاستعلامات المحفوظه في قاعدة البيانات ذاتها .
ويمكن استخدام الكائن Parameter في الكود اعلاه ليكون بالشكل التالي :

Dim sql As String = "SELECT ProductID, ProductName FROM Products WHERE ProductName Like @ProductName + ‘%’"

Dim cmd As New SqlCommand(sql, conn)

cmd.Parameters.AddWithValue("@ProductName", TextBox1.Text)

حيث يتم اتباع الخطوات التالية عندما نرغب باستخدام الكائن Parameter :
1- في جملة الاستعلام ، نقوم بوضع تسميه معينه بدلا من اسناد قيمه متغير او كائن الى حقل معين ، فلو تلاحظ في الكود الماضي تم استخدام ProductName@ بدلا من وضع علامات تنصيص ثم استخدام الاداة TextBox1
2- تمت اضافه عنصر جديد الى مصفوفة الباراميترات التابعه للكائن cmd والذي هو عباره ع كائن اوامر SqlCommand مع مراعاة استخدام نفس تسميه الباراميتر التي وضعناها في جملة الاستعلام SQL او حتى تلك المحفوظة في استعلام قاعدة البيانات ونعطيه القيمه المطلوبة وهي النص المكتوب في TextBox1 .
احدى فوائد الباراميترات هي المحافظه على شكل جمله الاستعلام من وضع علامات الاقتباسواسماء كائنات مربعات النصوص او الادوات التي تحتوي على القيمه المطلوب ارساله مع جمله الاستعلام ، فائده اخرى نجنيها ، وهي امكانيه استخدام الاستعلامات المخزنة في قاعدة البيانات التي تتطلب باراميترات ، فنحن في تطبيقاتنا نرغب بأن يتم عرض البيانات على شرط يحدده المستخدم وليس شرطا ان تكون قيمه ثابته في كل مره خصوصا عند البحث والاضافه والحذف والتعديل .
فوائد اخرى سنعرفها في السطور التاليه وهي مهمه جدا .
بالعودة الى الكود الذي وضعناه في البدايه :

Dim sql As String = "SELECT ProductID, ProductName FROM Products WHERE ProductName Like ‘" & TextBox1.Text & "%’"

Dim cmd As New SqlCommand(sql, conn)
Dim ds As New DataSet
Dim da As New SqlDataAdapter(cmd)
debug.WriteLine(sql)    ‘Lets us see the sql just before it is executed!
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
‘DataBind   ‘Uncomment this line if a web application

هنا سيسأل سائل ويقول :انا يكفيني استخدام الكود بهذه الطريقة طالما انني استخدم استعلامات من داخل تطبيقي وليست استعلامات مخزنة في قاعدة البيانات ، سأجيبه واقول له جرب ادخال القيمه التالية في TextBox1:

Chef Anton’s

الآن جرب الكود وانظر الى الخطأ الذي سيحدث وكله بسبب استخدام العلامه الصغيره ‘ ، طيب اذا كان المستخدم يدخل البيانات باللغه الانجليزية فان من حقه استخدام تلك العلامة في كتابه الاسماء وغيرها ، حتى في اللغه العربيه قد نحتاجها احيانا ،
طيب ما الحل ؟ الحل استخدم الباراميترات Parameters باستخدام الكائن Parameter .
حالة ثانيه وهي عند الرغبه في ادخال تاريخ مثل الاستعلامات التالية :

‘sql server 
Dim sql As String = "SELECT FirstName,LastName FROM Employees WHERE HireDate =’" & TextBox1.Text & "’"
‘oledb 
Dim sql As String = "SELECT FirstName,LastName FROM Employees WHERE HireDate =#" & TextBox1.Text & "#"

لكوننا نستخدم النظام التالي في ادخال التواريخ : dd/MM/yyyy وليس النظام الأمريكي MM/dd/yyyy فإن احتمال ظهور رسائل الخطأ وارد جدا ، وعمليه استخدام الداله Format لتغيير التنسيق اعتبره شخصيا انتقاص من حقنا من قبل الأمريكان بإجبارهم لنا ان نستخدم طرق ملتويه وان كانت سهله لمجرد اننا لا نتبع نظام تاريخهم في التنسيق .
طيب ما الحل ؟ الحل استخدم الباراميترات Parameters باستخدام الكائن Parameter .
حالة ثالثه ، جرب استخدام الاستعلام التالي :

Dim sql AS String = "SELECT ProductID, ProductName FROM Products WHERE ProductName Like ‘" & TextBox1.Text & "%’"

الآن يسرني ان اخبرك بأنه من عاشر المستحيلات ان تستخدم الكود السابق لادخال قيمه في الاستعلام مثل التالية :

x’

والسبب ببساطه انه سيكون لديك استعلام بالشكل التالي :

SELECT ProductID, ProductName FROM Products WHERE ProductName LIKE ‘x’%’

ونحن معلوم لدينا انه لا يمكن ان نستخدم الحاصره ‘ من دون اغلاقها بواحده اخرى تليها !
ايضا استخدام الادخال التالي يؤدي الى خطأ آخر مشابه :

x’ —

طيب ما الحل ؟ الحل استخدم الباراميترات Parameters باستخدام الكائن Parameter .
كيف نستخدم الباراميترات في جميع الحالات السابقه ؟ هذا ما سنعرفه في الجزء الثاني ،

التصنيفات :تقنية عامة الوسوم:, ,
  1. ابراهيم
    يونيو 13, 2010 الساعة 11:13 ص

    بسم الله

    أخي الفاضل النبهاني ,, رسالة شكر لك على ما تقدمة من نشر للعلم والمعرفة وبحق إنك تلامس ما يحتاجه المبرمج بالفعل فقد كنت ابحث عمن يتحدث عن ما ذكرت سالفا وفي مجموعة من الكتب التي اقتنيتها ولم اجد ما يفيد سوى في مشاركتك هذه والمشاركة المرتبطة بها .

    وفقك الله

    لي طلب أرجو أن تذكر المصدر الذي اقتفيت منه هذه المعلومات فهي بحق ثمينة جدا ,, فيهمني جدا جدا أن اعرف المصدر ولك كل الشكر.

    طلب آخر هل هناك مراجع تنصح باقتنائها عربية أو انجليزية وشكرا.

  2. يونيو 13, 2010 الساعة 12:59 م

    اهلا بك اخي ابراهيم

    في الحقيقة كتبت هذه المقالة منذ فترة زمنية طويلة جدا، وعلى ما اذكر اني استعنت في كتابتها بمجموعة متعددة من المصادر لانني لم اجد مصدرا واحدا شمل كل شيء لذلك كتبت هذه المقاله يومها .

  3. محمد النعيمي
    يوليو 13, 2011 الساعة 1:03 م

    أخي العزيز انا اجرب جملة sql التالية
    dim sql as string =”select CustName from Customers where Custname like ‘ “& TxtName.Text & “%'”
    لكن للأسف لم يطلع لي شيء
    مع العلم انني استخدم vb.net2010 و sqlserver2005 ارجو مساعدتي

  1. No trackbacks yet.

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: