-->

إشترك في النشرة البريدية

إغلاق القائمة
جميع الحقوق محفوظة لـ الاختراع سمارت © 2019

تم تجديد الموقع وسنقوم بالعمل عليه مره اخري


اتعلم معايا ازاي تستخدم قواعد البيانات في السي شارب واومر المايسكل كوماند الدرس الاول


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

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

    الدرس ده ممكن يغطي جزا و اكمل الجزء التاني في نفس اليوم

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

    اولا نبدأ بالتعريف عن الكلاسات المهمة في السورس والي من خلالها هتبدا رحلتك معايا

    اي قاعدة بيانات في الدنيا من نوع 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

    الدرس التاني هكمل فيه تقدر تدخله

    من هنا 

    إرسال تعليق