المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : استخدام Parameters في ADO.NET لتبادل البيانات مع قاعدة البيانات - الجزء الثاني


الناشر
09-26-2008, 02:12 PM
في الجزء الاول من هذا الدرس تكلمنا حول اهميه الباراميترات وفوائدها ، اما الآن فنأتي الى كيفية استخدامها .
في هذا الدرس لن اطول كثيرا في الحديث ، فقط نذكر كيفيه استخدام الباراميترات ونذكر بعض الاكواد والامور المتعلقه بها .

الكود التالي يقوم بتمرير باراميتر يحمل الاسم 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 يمكن زياره الرابط التالي (http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbtype(VS.71).aspx)في حاله OleDB او الرابط التالي (http://msdn2.microsoft.com/en-us/library/system.data.dbtype(VS.71).aspx) في حاله 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"


منقول ... (http://alnabhani.wordpress.com/2008/09/26/%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-parameters-%d9%81%d9%8a-adonet-%d9%84%d8%aa%d8%a8%d8%a7%d8%af%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d9%85%d8%b9-%d9%82%d8%a7%d8%b9%d8%af-2/)