في الجزء الاول من هذا الدرس تكلمنا حول اهميه الباراميترات وفوائدها ، اما الآن فنأتي الى كيفية استخدامها .
في هذا الدرس لن اطول كثيرا في الحديث ، فقط نذكر كيفيه استخدام الباراميترات ونذكر بعض الاكواد والامور المتعلقه بها .
الكود التالي يقوم بتمرير باراميتر يحمل الاسم 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" |
هلا اخوي النبهاني
عندي سؤال يخص مشروعي ولكن يحتاج لشرح
هل من الممكن ان ترسل لي ايميلك حتى نتواصل
انا محتاجه جدا لهذه الاستشاره
شكرا جزيلا
اهلا بك اخت rana وشكرا لك على التواصل ، في الحقيقة اعتذر عن عدم قدرتي على مساعدتك وذلك لأنني غرقان في الامتحانات بشكل متواصل وان شاء الله تجدين من يساعدك وعذرا على التأخر في الرد.
اتمنى ان تكون المواضيع في ملفات يستطيع المستخدم تحميلها وبسرعة للاستفادة منها في اوقات اخرى ان لم يتوفر لديه النت ولكم جزيل الشكر
السلام عليكم ..
شاكر ومقدر جهودك ..
إستفدت من درسك الكثير ..
خصوصاً مشكلة الفاصلة (‘) .. تسبب الكثير من المشاكل ..
موفق بإذن الله ..