اتعلم معايا ازاي تستخدم قواعد البيانات في السي شارب واومر المايسكل كوماند الدرس الاول
السلام عليكم ورحمة الله وبركاته
اسف للغيبة الطويلة بسبب ظروف صحية وضغوط والتزامات كنت المفروض اخلصها
وانت عارفين مع الوقت الواحد بيبقي عليه ضغوط اكتر
المهم انهارده حبيت اضيف للمهتمين ازاي يستخدمو قواعد البيانات في السي شارب بالنسبة لسورسات كونكر
وازاي تستخدم اوامر المايسكل كوماند
وازاي تحل المشاكل في اي سيستم واجتهك فيه مشاكل بالنسبة للقواعد البيانات
الدرس ده ممكن يغطي جزا و اكمل الجزء التاني في نفس اليوم
وممكن اعمل درس منفصل يبقي فيه فيديوهات
اولا نبدأ بالتعريف عن الكلاسات المهمة في السورس والي من خلالها هتبدا رحلتك معايا
اي قاعدة بيانات في الدنيا من نوع MYSQL لو حبيت تستخدمها هيطلب منك
السيرفر المستضيف للقاعدة
اسم المستخدم اليوزر نيم يعي
والباسورد
والاسم والباص بيكونو للسماح ليك من خلال المايسكل سيرفر باستخدام القواعد تلك
بالنسبة لينا بنستخدم الاباتشي سيرفر Appserver وده بيكون
السيرفر المستضيف localhost
والاسم بيكون root
والباسورد انت بتعمله بنفسك وتحفظه في مكان امن
في العادة بنكون مسطبين النافي كات NaviCat او ممكن نكون بنستخدم Phpmyadmin وانا مش بنصح بيه لو هتعمل باسود ضعيف لانك ممكن تكون عرضة للاختراق.
بالنسبة للسورس هتلاقي فولدر اسمه Database بداخله فولدر الي فيه كلاسات MYSQL
المهم الكلاسات ديه فيه برمجيات الي من خلالها هنتعامل مع السورس والتعليمات الي بنستخدمها للتحكم في القواعد.
اهم كلاس معانا هو "MySqlCommand.cs"
ده في اوامر الي بنستخدمها والانواع الي هتتحكم في الجداول في القاعدة
يعني لو فتحنا الكلاس دهublic MySqlCommand(MySqlCommandType Type)
{
this.Type = Type;
switch (Type)
{
case MySqlCommandType.SELECT:
{
_command = new StringBuilder("SELECT * FROM <R>");
break;
}
case MySqlCommandType.UPDATE:
{
_command = new StringBuilder("UPDATE <R> SET ");
break;
}
case MySqlCommandType.INSERT:
{
insertFields = new SafeDictionary<byte, string>();
insertValues = new SafeDictionary<byte, string>();
lastpair = 0;
_command = new StringBuilder("INSERT INTO <R> (<F>) VALUES (<V>)");
break;
}
case MySqlCommandType.DELETE:
{
_command = new StringBuilder("DELETE FROM <R> WHERE <C> = <V>");
break;
}
case MySqlCommandType.COUNT:
{
_command = new StringBuilder("SELECT count(<V>) FROM <R>");
break;
}
}
}
هنلاحظ هنا الانواع الي بنستخدمها والي هي
DELETE, INSERT, SELECT, UPDATE, COUNT
انا يهمني
امر الحذف DELETE
امر الاضافة INSERT
امر التحديد او الاختيار SELECT
امر التحديث UPDATE
طبعاً انا كده ولسه مش شرحت حاجة انا بس بمهد للموضوع
هبدا بالامر الي هتشوفو دلوقتي
using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("voterhouse")
الامر ده لو سالتك هيعمل ايه
هتجاوب بيحدد القاعدة الي اسمها "voterhouse" طب انا لما احدد قاعدة اقدر اعمل ايه
تقدر تعمل حاجات كتيرة
مثلا تقدر تقرأ البيانات الي فيها يعني هتستخدم امر فرعي اسم reader
طب ازاي
using (var reader = new MySqlReader(cmd))
بس طبعاً ده المفروض ليه حدود او الي اسمه scope وده بنفذه من خلال القوسين دول { }
طب بين القوسين هقدر اعمل ايه
اقدر بقي اقرأ البيانات الي انا محتاجها
وده بيحصل ازاي تعالي نعرف
int times;times = reader.ReadUInt32("Tiems");
اظن واضح الي حصل انا عملت تعريف لمتغير اسمه times
وقرأت الجدول الي اسمه "Tiems"
يبقي امر القرائة هو reader.ReadUInt32("Tiems") ولما ضفت = وحطيت ادامها المتغير كده مفهوم
تعرفو اني لو سكت هبقي مش بفهم لان المعلومة كده مش كاملة
reader.ReadUInt32
دلوقتي حد يسألني انا معرف times ب intger يعني عدد قيمة عددية
فانا لو عندي قيمة اكبر مثلا رقم اكبر ومعرفه في متغير عددي Int64 مثلاً
فانت لازم تضبط ReadUInt32 الي ReadUInt64 تمام
خلي بالكم من التفاصيل ديه
المفروض انا بكلم ناس فاهمة في السي شارب وعندها المبادئ في DataType كويسة
طيب لو انا معرف times علي انها كلمة مش بتشيل حروف لا كلام يعني string
المفروض ReadUInt32 تبقي ايه لازم تبقي ReadString
يعني الكود هيبقي كدا
times = reader.ReadString("Tiems");
احنا كده لحد الان تمام وبنعرف نقرأ القيم تمام لحد الان
طب انا دلوقتي واقع في ورطة وعندي الجدول مثلا "accounts" او "enteties"
ومحتاج احدد سطر معين لشخصية معينة
مثلا انا عامل مسابقة او سيستم ومرتبط ومحتاج الشخصية الفلانية ديه لما تستخدم الانبيسي او تدخل المابة يروح السيستم يجيب سطر الشخصية ديه ويقرأ منها قيمة.
اكيد بقي مش هينفع باستخدام الاوامر الي الي فوق
نيجي بقي علي الاداة Where
معناها والتي قيمة الحقل او Field تساوي
مثلا نشرح السطر ده
using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("voterhouse").Where("VoterID", uid))
لاحظ ان الكود ده بيقول هتعملي تحديد للقاعدة فوتر هاوس قيمة الحقل او "Field "VoterID قيمتها uid
وانا اصلا معرف uid علي انه intger
ده هيعمل ايه السيستم هيروح يحدد قاعدة "voterhouse" ويروح يبحث عن السطر الي فيه الحقل "VoterID " بيساوي uid
وانت مثلاً بقي عامل
int uid;
uid = client.Account.EntityID;
فهو بيروح للسطر الي قيمة VoterID فيها الشخصية الي بتلعب حالياً.
وبتنفذ بعدها عادي جداً reader عادي جداً
طب دلوقتي انا مثلا عاوز اقرأ اكتر من قيمة
لو جينا نفذنا
client.Entity.Name = reader.ReadString("Name");client.Entity.NobalityDonation = reader.ReadUInt64("Donation");
طيب نعمل ايه عشان تضبط اقولك بقي عشان تقرا اكتر من قيمة
هتعمل شرط صغير
وهو كلأتي
if (reader.Read())
{
client.Entity.Name = reader.ReadString("Name");
client.Entity.NobalityDonation = reader.ReadUInt64("Donation");
}
كده تقدر تقرأ براحتك مش في قيود عليك.
ده كان الامر SELECT مع Where وازاي تعمل reader
الدرس التاني هكمل فيه تقدر تدخله
من هنا
تعليقات: 0
إرسال تعليق