التعامل مع قواعد البيانات

  • خطوات التعامل مع قواعد البيانات:
  1. استيراد مجال الاسماء الخاص بالتعامل مع قواعد البيانات.
  2. كتابة نص الاتصال مع قاعدة البيانات.
  3. انشاء كائن للإتصال مع قاعدة البيانات.
  4. فتح الاتصال مع قاعدة البيانات.
  5. انشاء كائن لطلب استعلام من قاعدة البيانات.
  6. انشاء كائن لقراءة نتائج الاستعلام.
  7. التعامل مع النتائج (طباعتها , تنفيذ عمليات عليها ........)
  8. إغلاق الإتصال مع قاعدة البيانات.


أولاً: استيراد مجال الاسماء الخاص بالتعامل مع قواعد البيانات:
using System.Data;
using System.Data.SqlClient;

 ثانياً: كتابة نص الاتصال مع القاعدة:
string conStr=@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Users.mdf" + ";Integrated Security=True;Connect Timeout=30;User Instance=True";

لفهم فكرة نص الاتصال لنأخذ المثال التالي:
تريد ان تتصل بصديق, عندها ستقوم برفع السماعة وكتابة رقم صديقك
وربما اذا كان من محافظة اخرى او دولة اخرى ستكتب رمز النداء لتلك المحافظة او الدولة

وهنا نفس الشيء للإتصال مع قاعدة البيانات يجب ان تكتب نص (رقم) للإتصال مع القاعدة .. وأيضاً هذا النص يختلف حسب نوع قاعدة البيانات (Access-SqlServer-Oracle…)
وهذا النص لا داعي لحفظه او حتى لفهمه كله لانه بامكانك نسخه ولصقه مباشرة ولكن اهم قسم في النص والذي يجب ان تفهمه هو القسم الاول DataSource:
Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath

القسم ".\SQLEXPRESS" يحدد نوع واصدار قاعدة البيانات وكما هو واضح انها قاعدة SqlServer نسخة Express
القسم الثاني "AttachDbFilename" والذي يحدد مسار ملف قاعدة البيانات على الكمبيوتر .. وهنا قمنا باستدعاء الخاصية StartupPath وهذه الخاصية موجودة ضمن الفيجوال ستوديو يعني جاهزة والتي تعطينا مسار برنامجنا يعني من أي مسار يعمل برنامجنا فإذا كان
مثلاً: في مجلد Windows على القرص C ستعيد لنا الخاصية: C:\Windows
وثم كتبنا اسم قاعدة البيانات فيصبح المسار مثلاً: C:\Windows\Users.mdf


ثالثاً: انشاء كائن الاتصال مع القاعدة:
SqlConnection con = new SqlConnection(conStr);        

انشئنا كائن اسمه con للاتصال مع القاعدة عن طريق نص الاتصال (رقم التلفون) ...


رابعاً: فتح الاتصال:
con.Open();
قمنا باستدعاء الاجراء Open والذي يفتح الاتصال (لأنه لايمكنك التعامل مع القاعدة إلا عن طريق اتصال مفتوح)


خامساً: انشاء كائن لطلب استعلام من القاعدة:
SqlCommand cmd = new SqlCommand("Select * From tbUsers",con);

انشئنا كائن اسمه cmd يقوم بطلب استعلام من القاعدة  والاستعلام هو عن الجدول tbUsers باستخدام كائن الاتصال con
وطبعاً الاستعلام يمكن ان يكون Select,Update,Insert او اي استعلام آخر.


سادساً: انشاء كائن لقراء نتائج الاستعلام:
SqlDataReader dr = cmd.ExecuteReader();

انشئنا كائن اسمه dr وهو من النوع DataReader من اسمه واضح (قارىء البيانات)
ولكن من أين سيأتي بالبيانات ؟؟ طبعاً يجب ان نسنده (نربطه) مع الكائن السابق cmd والذي يحوي طلب الاستعلام
وقمنا بربط الكائن dr مع الكائن cmd عن طريق التابع ExecuteReader() والذي يقوم بتنفيذ الاستعلام
وهو عبارة عن Function تابع يعيد كائن من نوع DataReader اي ان نتيجته هي كائن يحوي نتائج الاستعلام


سابعاً: التعامل مع نتائج الاستعلام:
while (dr.Read())
{
    textBox1.Text = textBox1.Text + dr["userName"].ToString() + "\n";
}

قمنا بعمل حلقة While للدوران على جميع نتائج الاستعلام حيث سنتعامل مع النتائج على انها مصفوفة
التابع Read() يقوم بقراءة النتائج واحد تلو الآخر (أي في كل دورة سيقرأ سجل جديد) وطالما توجد نتائج أخرى سيعيد قيمة True وعندما ينتهي من قراءة جميع النتائج يعيد False فتتوقف الحلقة
قمنا بطباعة النتائج ضمن TextBox .. حيث سيطبع البرنامج قيم الحقل userName
لاحظ قمنا بالحصول على البيانات من الكائن dr على شكل مصفوفة: dr["userName"].ToString()
وهنا دليل العنصر ضمن المصفوفة هو نص اسم العمود وبامكاننا استخدام رقم العمود ولكن الطريق الاولى أفضل (لأن حفظ اسم العمود اسهل من حفظ رقم العمود مع الانتباه إلى ان الترقيم يبدأ من الصفر)


ثامناً: إغلاق الاتصال مع القاعدة:
con.Close();

اغلاق الاتصال عن طريق الامر Close() .. وهذا العملية ضرورية اي يجب اغلاق الاتصال بعد الانتهاء من التعامل مع القاعدة كي لاتنتج أخطاء مستقبلية.


إرسال تعليق