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

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

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

في الجزء الاول من هذا الدرس تكلمنا حول اهميه الباراميترات وفوائدها ، اما الآن فنأتي الى كيفية استخدامها .
في هذا الدرس لن اطول كثيرا في الحديث ، فقط نذكر كيفيه استخدام الباراميترات ونذكر بعض الاكواد والامور المتعلقه بها .

الكود التالي يقوم بتمرير باراميتر يحمل الاسم ProductName@ الى الاستعلام الموجود في الكائن cmd :

Dim sql As String = "SELECT ProductID, ProductName FROM Products WHERE ProductName = @ProductName "
Dim cmd As New SqlCommand(sql, conn) ‘orDim cmd as New OleDbCommand(sql, conn)
cmd.Parameters.AddWithValue("@ProductName", TextBox1.Text)

  

اذا جربت ادخال اي من القيم التاليه في TextBox1 فسيعمل الكود بلا مشاكل ولن تحدث اي اخطاء بمشيئه الله :

chef
Chef Anton’s
x’ INSERT Employees (FirstName,LastName) VALUES(‘get here?’,’How did this’) —

الآن سنشرح الكود حبه حبه :
1- في السطر الأول تم انشاء متغير نصي جديد واسندنا له جمله الاستعلام المطلوبة واهم ما فعلناه هو اننا وضعنا بدلا من قيمه الحقل ProductName القيمه ProductName@ والتي تمثل اسم الباراميتر الذي سنمرره للكائن Parameter .
2- في السطر الثاني انشأنا كائن جديد من النوع SQLCommand ولك حريه نوعه على حسب قاعدة البيانات فيمكن ان يكون OleCommand او OracleCommand على حسب نوع قاعدة البيانات .
3- في السطر الثالث قمنا بإضافه باراميتر جديد الى مصفوفة الباراميترات التي تتبع الكائن cmd ، وهنا استخدمنا طريقة مباشره لتعريف الباراميترات وهي اننا اضفناه عن طريق الطريقة AddWithValue ومررنا له القيم المطلوبه .
المهم في السطر الثالث هنا هوه اننا وضعنا اسم الباراميتر المراد ارسال قيمته وهي ProductName@ ووضعنا القيمه الخاصه به وهي النص الموجود في الخاصيه Text التابعه للكائن textBox1 .
الباراميترات داخل جمل الاستعلام SQL :
وبالنسبه لتسميه المتغيرات في جمل الاستعلام SQL يمكنك ان تضع اي اسم تشاء ، ابعد عن الاسماء العربية ، لا تستخدم الارقام ، ولا تضع الاسم بين حاصرتين ولا مسافات . ويفضل لو يبدأ بالرمز @ لتسهل على نفسك قراءه الكود لاحقا ولتعرف مباشره ان تلك الكلمه هي اسم لباراميتر بمجرد وجود @
تسميه الباراميتر تتيح لنا تمرير واستلام قيم اكثر من باراميتر واحد ، فيمكنك انشاء عدد من الباراميترات وكل منها له اسم معين وعند اضافتها الى المصفوفة Parameters ستقوم بارسال كل قيمه مع اسم الباراميتر فتتجنب اي مشكله بخصوص الباراميترات ،
بعض المبرمجين قد يضع العلامة ? بدلا من قيمه كل حقل ويستخدمها مع كل الحقول ، وبالتالي سيكون لكل الباراميترات الاسم نفسه ، في هذه الحاله يجب ان تضيف كل باراميتر وقيمته الى مصفوفة الباراميترات Parameters التابعه للكائن cmd بالترتيب، مع ذلك ، انا لا احبذ هذه الطريقة مطلقا .
الكائن Parameter :
حتى يكتمل حديثنا عن البارميترات ، احببت ان تكلم عن الكائن Parameter .
يمكننا انشاء باراميتر جديد بالصيغه التالية :

Dim ProductNameParameter As New SqlClient.SqlParameter
Dim ProductNameParameter As New OleDb.OleDbParameter

طبعا الكود السابق هو مثال لكيفية انشاء باراميتر جديد خاص بـ SQL او باكسس . الغرض منه ان تعرف ان الكائن Parameter يتبع احد انواع مزودات قواعد البيانات في ADO.NET .

في الكود التالي قمنا بتعريف باراميتر بالإسم ProductNameParameter واسناد قيمه ونوع له :

Dim cmd AsNew Data.SqlClient.SqlCommand(sql, conn) ‘orDim cmd as New OleDbCommand(sql, conn)
Dim ProductNameParameter AsNew Data.SqlClient.SqlParameter
With ProductNameParameter
.ParameterName = "@ProductName"
.Value = Textbox1.Text
.SqlDbType = SqlDbType.NText
EndWith
cmd.Parameters.Add(ProductNameParameter)

 

فكما رأينا هذه احدى الطرق الكثير لانشاء باراميتر وتمرير قيمته الى الاستعلام بصيغه جمل SQL . ومن الكود السابق تبرز الخصائص الثلاث التالية :

  • ParameterName : وهي خاصيه من النوع String ويجب ان تسند لها اسم الباراميتر الذي وضعته في جمله الاستعلام .
  • SqlDBType : وهي خاصيه تقوم بتحديد نوع قيمه البارميتر من خلالها ، وهي تختلف باختلاف نوع مزود قاعدة البيانات للباراميتر ، فلو كانت SQL كحالتنا هذه ستكون SQLDBType ولو كانت تتبع OleDB ستكون OleDBType وهكذا .
  • Value : وهذه الخاصيه تمثل قيمه الباراميتر .

لمن يريد التوسع حول الانواع الممكنه للباراميترات والتي نسندها للخاصيه Type يمكن زياره الرابط التالي في حاله OleDB او الرابط التالي في حاله SQL .

طبعا من الممكن لأي مبرمج ان يختصر الكود السابق كثيرا باستخدام احد المشيدات Construcotrs الخاصه بالكائن Parameter عند انشاء نسخه جديده منه بالذاكره ، لكن ما لا اعرف سببه حتى الان هو عدم وجود مشيد يستقبل قيم الخصائص الثلاث السابقه معا ! ولكن بالطريقة التالية يمكنك فعلها :

Command.Parameters.Add("@SerialNum", OleDbType.Integer).Value = 239

كود أخير اضيفه في هذا الجزء لمن يرغب بإرشاد لمعرفه كيفيه انشاء اكثر من باراميتر واحد والتعامل معها :

Dim sql As String = "SELECT FirstName,LastName FROM Employees" & _
" WHERE HireDate BETWEEN @StartDate AND @EndDate"
About these ads
  1. rana
    نوفمبر 24, 2008 الساعة 10:18 ص

    هلا اخوي النبهاني

    عندي سؤال يخص مشروعي ولكن يحتاج لشرح

    هل من الممكن ان ترسل لي ايميلك حتى نتواصل

    انا محتاجه جدا لهذه الاستشاره

    شكرا جزيلا

    • ديسمبر 10, 2008 الساعة 6:19 م

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

  2. فبراير 17, 2009 الساعة 9:27 م

    اتمنى ان تكون المواضيع في ملفات يستطيع المستخدم تحميلها وبسرعة للاستفادة منها في اوقات اخرى ان لم يتوفر لديه النت ولكم جزيل الشكر

  3. أبو محمد
    يوليو 3, 2009 الساعة 7:07 ص

    السلام عليكم ..

    شاكر ومقدر جهودك ..

    إستفدت من درسك الكثير ..

    خصوصاً مشكلة الفاصلة (‘) .. تسبب الكثير من المشاكل ..

    موفق بإذن الله ..

  4. فبراير 14, 2012 الساعة 1:43 م

    انا كتبت نفس الكود السابق على زر save ولم يتم تنفيذ أى شى وظهرت رسالة خطأ

    • فبراير 14, 2012 الساعة 3:16 م

      اخي baraa ماهو الخطأ الذي ظهر لك وفي اي سطر؟

  5. ازاد داوود
    فبراير 12, 2014 الساعة 4:02 م

    ياريت استاذ النبهاني ان تقوم بادراج مثال جاهز عن هذا الشرح لكي استفاد اكثر اذا ممكن
    وجزاك الله خير

  6. ازاد داوود
    فبراير 12, 2014 الساعة 4:12 م

    السلام عليكم ……
    اخي الاستاذ النبهاني تحية طيبة
    انا من كردستان العراق
    اريد الاستافادة من خبرتك اذا شئت

    عندي مشكلة عالقة من فترة

    وهي
    عندي فورم form1 عالفيجوال دوت نيت
    و قاعدة بيانات sql server
    وفيها الاستعلام التالي

    select *from product where catigoriid =@catigoriid

    طيب في الفورم الاول form1
    عندي كومبو بوكس من جدول المجموعات
    اريد كود ياخذ قيمة الكومبو بوكس الى الاستعلام الموجود داخل قاعدة البيانات اسمه Quproducts
    لكي يعطيني المواد ذات المجموعة المحددة من الكومبو بوكس
    طبعا بدي هذه المواد بعد الفرز على فورم ثاني

    form2
    يطلع فيه المواد الي تحقق الشرط الي موجود بالاستعلام الذي اخذ قيمته من الكومبو بوكس على الفورم form1

    ولك جزيل الشكر استاذ النبهاني المحترم

    ازاد داوود …………..

  7. ازاد داوود
    فبراير 12, 2014 الساعة 4:14 م

    العفو استاذي اذا مافيها ازعاج اريد مثال جاهز لكي اعرف اكثر اذا شئت

  1. No trackbacks yet.

أضف تعليق

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

WordPress.com Logo

You are commenting using your WordPress.com account. تسجيل خروج   / تغيير )

Twitter picture

You are commenting using your Twitter account. تسجيل خروج   / تغيير )

Facebook photo

You are commenting using your Facebook account. تسجيل خروج   / تغيير )

Google+ photo

You are commenting using your Google+ account. تسجيل خروج   / تغيير )

Connecting to %s

تابع

Get every new post delivered to your Inbox.

%d bloggers like this: