الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قواعد البيانات وعمليات Select,Insert,Update,Delete بسهولة في C#

بدأه Fuad-Prince في 2 أبريل 2013 · 0 رد · 6,145 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم ورحمة الله وبركاته

طبعاً هذه مشاركتي الأولى هنا وأتمنى أن تحظى برضاكم

 

أثناء تعاملي مع لغة C# وجدت أن عملية الإتصال بقواعد البيانات تحتاج للكثير من العمل والتعب

فيجب أولاً انشاء كائن اتصال من نوع OleDbConnection وبعدها كائن استعلام من نوع OleDbCommand

ثم يجب أن تشحن كائن الاتصال بمسار قاعدة البيانات وتعليمات الاتصال التي تختلف حسب نوع قاعدة البيانات مثلاً إذا كانت قاعدة البيانات من نوع Access فتكون تعليمات الإتصال كمايلي:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "'";

حيث أن fileName هو مسار قاعدة البيانات, وبعدها يجب أن تشحن كائن الإستعلام بقيمة الإستعلام الذي تريد تنفيذه على قاعدة البيانات من إضافة أو حذف أو تعديل

وبعدها اسناد كائن الاتصال إلى كائن الاستعلام وبالنهاية تنفيذ الاستعلام وأخذ النتيجة سواء كانت رقم يمثل عدد السجلات المتأثرة أو جدول يمثل نتيجة استعلام select

تلك الطريقة تبدو جيدة ولكن مع مرور الوقت ومع تكرارها مع كل مشاريعك التي تحتاج إلى قواعد بيانات سيصبح الأمر مملاً جداً, وعندها فكرت بطريقة لتسهيل الموضوع وبحثت على شبكة الإنترنت ووجدت مقطع الفيديو التالي: 

ومن خلاله توصلت إلى طريقة جيدة لإنشاء صف DataBase يقوم بكل العمليات الرويتينية السابقة فكان كالتالي:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
 
namespace DataBase
{
    class AccessDB
    {
        //Fields
        string ConnectionString;
        OleDbConnection conn;
        OleDbCommand cmd;
 
        //properities
        public string Connection { set { ConnectionString = value; } get { return ConnectionString; } }
    }
 
    }
}

بالبداية تعريف اسم الصف وكائن الاتصال وكائن الاستعلام وخاصية من أجل التعامل مع كائن الاتصال…

بعدها نحتاج إلى دالة الباني وهي كما يلي:

 public AccessDB(string fileName)
        {
            ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "'";
        }

هذا الباني يأخذ معامل واحد عبارة عن نص يمثل مسار قاعدة البيانات وبالتالي عند التعامل مع هذا الصف وانشاء كائن منه فإن أول عملية هي تمرير مسار قاعدة البيانات وانشاء كائن الإتصال…

يوجد بعض العمليات الروتينية الضرورية التي تحتاجها في تطبيقات قواعد البيانات مثل الاتصال بقاعدة البيانات وفتح الاتصال أو التأكد من صحة الاتصال وهذه العمليات تتكرر تقريباً بكل عمليات الاستعلامات لذلك سنضعها في دالة خاصة كما يلي:

        private void Launch(CommandType CT, string Ctxt)
        {
            try
            {
                // الاتصال بالقاعدة وانشاء كائن الاتصال
                conn = new OleDbConnection(ConnectionString);
                conn.Open();
                cmd = new OleDbCommand();
                conn.Close();
            }
            catch (Exception x)
            {
                MessageBox.Show("خطأ بالقاعدة \n" + x.Message);
                System.Environment.Exit(0);
            }
 
            cmd.Connection = conn;
            cmd.CommandType = CT;
            cmd.CommandText = Ctxt;
            conn.Open();
        }

بعد الاتصال بالقاعدة وتحديد جملة الاستعلام نحتاج أيضاً إلى عمليات أخرى روتينية مثل عملية تنفيذ الاستعلام وإغلاق الإتصال بقاعدة البينات ومثل العمليات السابقة سنضعها في دالة خاصة:

private int MakeItWork()
        {
            try
            {
                int n = cmd.ExecuteNonQuery();
                conn.Close();
                return n;
            }
            catch
            {
                conn.Close();
                return -1;
            }
        }

والآن نحتاج إلى الدوال التي تنفذ الإستعلامات, بما أن عملية select مختلفة عن عمليات insert,update,delete سنحدد دالة خاصة لها:

public DataTable RunQuery(string query)
        {
            Launch(CommandType.Text, query);
            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());
            conn.Close();
            return dt;
        }

هذه الدالة تأخذ نص عبارة عن الإستعلام المراد تنفيذه وتعيد جدول من نوع DataTable يحوي النتائج…

ونحتاج بالنهاية إلى دالة لتنفيذ عمليات insert,update,delete إلى دالة خاصة بهم كما يلي:

public int RunUpdateQuery(string InsUpdDel)
        {
            Launch(CommandType.Text, InsUpdDel);
            return MakeItWork();
        }

وبهذا يكون الصف الخاص بالتعامل مع قواعد البيانات جاهزاً,

وللتعامل مع قواعد البيانات باستخدام هذا الصف يمكنك تنفيذ مشابهة للمثال التالي:

AccessDB newDb = new AccessDB("D://customers.mdb");
 
string insertQuery = "insert into Customers Values (1,'Fuad','Prince')";
newDb.RunUpdateQuery(insertQuery);

طبعاً هذا الصف خاص بقواعد البيانات من نوع MS Access أما إن كنت تستخدم قواعد بيانات من نوع آخر (مثل SQL SERVER) فيجب أن تقوم ببعض التعديلات على هذا الصف

لنقم بمثال تطبيقي لهذا الصف كالشكل التالي:

1-300x214.png

 

بعد انشاء مثل تلك الواجهة قم بإضافة المكتبة البرمجية للصف DataBase الذي أنشأناه في قائمة الـ References الخاصة بهذا المشروع كما يلي:

2-300x196.png

ثم أنشئ قاعدة بيانات ببرنامج MS Access ولتكن كما يلي:

3-300x155.png

والآن بقي وضع التعليمات الخاصة باستخدام الصف السابق

أولاً استورد المكتبات الخاصة كما يلي:

using System.Data.OleDb;using DataBase;

ثم في أي مكان في الصف Form1 قم بتعريف كائن من نوع AccessDB كما يلي:

namespace DbTest
{
    public partial class Form1 : Form
    {
        DataBase.AccessDB AcData;
        public Form1()
        {
            InitializeComponent();
        }

وبعدها في دالة تحميل النافذة ضع الشيفرة التالية لإنشاء الكائن وشحنه بمسار قاعدة البيانات:

        private void Form1_Load(object sender, EventArgs e)
        {
            string path=System.IO.Directory.GetCurrentDirectory();
            path += @"\phoneBook.mdb";
 
            AcData = new DataBase.AccessDB(path);
        }

ولتطبيق عملية الإضافة ضع الشيفرة التالية في حدث النقر على زر “إضافة جديد”:

        private void button1_Click(object sender, EventArgs e)
        {
            if (CheckData())
            {
                string query =
                    String.Format("INSERT INTO PhoneBook(F_Name,L_Name,Birth_Date,Phone,Address) VALUES ('{0}','{1}','{2}','{3}','{4}')", fname.Text, lname.Text, date.Text, phone.Text, address.Text);
                int rst = AcData.RunUpdateQuery(query);
                if (rst >= 0)
                    MessageBox.Show("تمت الإضافة بنجاح", "نجاح", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                    MessageBox.Show("حصل خطأ أثناء الإضافة يرجى التأكد من البيانات","خطأ",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            else
                MessageBox.Show("يرجى ملء جميع الحقول");
        }

طبعاً في البداية عليك أن تفحص المدخلات فإن كانت ناقصة عليك أن تنبه المستخدم لذلك, حيث أنني أنشأت دالة خاصة من أجل عملية فحص المدخلات وهي الدالة CheckData() .

        private bool CheckData()
        {
            if (fname.Text != "" && lname.Text != "" && date.Text != "" && phone.Text != "" && address.Text != "")
                return true;
            else
                return false;
 
        }

وإذا تمت العملية بنجاح فسيتم إضافة السجل الجديد.

والآن من أجل عملية البحث نضع الشيفرة التالية في الحدث النقر على زر “بحث بالإسم”:

        private void button2_Click(object sender, EventArgs e)        {            if (fname.Text != "")            {                string query = String.Format("SELECT ID,F_Name,L_Name,Birth_Date,Phone,Address FROM PhoneBook WHERE F_Name = '{0}'", fname.Text);                DataTable dT = AcData.RunQuery(query);                if (dT.Rows.Count > 0)                {                    MessageBox.Show("تم إيجاد " + dT.Rows.Count + "نتيجة");                    int id=0;                    for (int i = 0; i < dT.Rows.Count; i++)                    {                        id=Convert.ToInt32(dT.Rows[0].ToString());                        fname.Text = dT.Rows[1].ToString();                        lname.Text = dT.Rows[2].ToString();                        date.Text = dT.Rows[3].ToString();                        phone.Text = dT.Rows[4].ToString();                        address.Text = dT.Rows[5].ToString();                    }                }                else                    MessageBox.Show("لم يتم إيجاد أي نتيجة");            }            else                MessageBox.Show("يرجى ادخال الإسم");        }

بالمرفقات توجد الملفات النهائي التي عملنا عليها بالإضافة إلى صف خاص للتعامل مع قواعد بيانات SQL SERVER

 

الملف المرفق

أتمنى أن يكون هذا الموضوع قد نال اعجابكم

 

==================

تم رفع المرفق علي سيرفر المنتدي مباشرة بواسطة المشرف محمد فؤاد تركي حتي لا تتعرض الوصلة للانتهاء

DataBase.rar

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 10 مايو 2013 في 09:07

مواضيع مشابهة