18 | Display data from The Excel file in a DataGridView based on the selected table

 شرح الكود

هذا الكود يقوم بالاستعلام عن بيانات من جدول معين في قاعدة بيانات (مثل ملف Excel) باستخدام OLE DB ويعرض النتائج في DataGridView. إليك شرح كل جزء من الكود:

١. إنشاء DataTable لتخزين البيانات:

Dim dtNew As New DataTable

dtNew.Clear()

  • dtNew: هو كائن من النوع DataTable، يتم استخدامه لتخزين البيانات المسترجعة من قاعدة البيانات (أو ملف Excel في هذه الحالة).
  • dtNew.Clear(): هذا السطر يقوم بمسح أي بيانات قد تكون موجودة مسبقًا في dtNew. يقوم Clear() بإزالة جميع الصفوف والأعمدة.

٢. إنشاء الكائن OleDbCommand لتنفيذ الاستعلام:

            Using cmd As New OleDbCommand("SELECT * FROM [" & cbTables.Text & "] ORDER BY st_name", connection)

  • cmd: هو كائن من النوع OleDbCommand، الذي يمثل الاستعلام (أو الأمر) الذي سيتم
  • إرساله إلى قاعدة البيانات أو ملف Excel.
  • الاستعلام SQL: "SELECT * FROM [" & cbTables.Text & "] ORDER BY st_name"

    • SELECT *: يعني استرجاع جميع الأعمدة من الجدول.

    • FROM [" & cbTables.Text & "]: هنا يتم تحديد اسم الجدول الذي يتم اختياره من ComboBox cbTables.Text.

    • ORDER BY st_name: يقوم بترتيب النتائج حسب العمود st_name (اسم الطالب).

ملاحظة: cbTables.Text يمثل اسم الجدول الذي اختاره المستخدم من ComboBox cbTables.


٣. إعداد خصائص OleDbCommand:

                    cmd.CommandType = CommandType.Text

                    cmd.CommandTimeout = 420

  • cmd.CommandType = CommandType.Text: تعني أن الاستعلام هو استعلام نصي (أي استعلام SQL عادي).
  • cmd.CommandTimeout = 420: يتم تحديد الحد الأقصى لمدة تنفيذ الاستعلام قبل أن ينتهي الاتصال. القيمة 420 تشير إلى 420 ثانية (أي ٧ دقائق).


٤. فتح الاتصال وتنفيذ الاستعلام:

    connection.Open()

    dtNew.Load(cmd.ExecuteReader)

  • connection.Open(): يقوم بفتح الاتصال بقاعدة البيانات أو ملف Excel.

  • dtNew.Load(cmd.ExecuteReader): ينفذ الاستعلام باستخدام ExecuteReader، الذي يُرجع كائن OleDbDataReader يحتوي على البيانات المسترجعة من الاستعلام. بعد ذلك، يتم تحميل البيانات إلى DataTable dtNew.


٥. ربط النتائج بـ DataGridView:

    dgvTempDB.DataSource = dtNew

  • dgvTempDB.DataSource = dtNew: يعين DataTable dtNew كمصدر بيانات لـ DataGridView dgvTempDB.
    • هذا يعني أن DataGridView سيعرض البيانات المسترجعة من قاعدة البيانات أو ملف Excel في واجهة المستخدم.


٦. إغلاق الاتصال:

 connection.Close()

بعد تحميل البيانات إلى DataTable وتعيينها كمصدر بيانات لـ DataGridView، يتم إغلاق الاتصال
 بقاعدة البيانات باستخدام connection.Close().

٧. استخدام Using:

  • Using هو بلوك يُستخدم لإدارة دورة حياة الكائنات مثل OleDbCommand. عندما يخرج التنفيذ من البلوك Using، يتم تلقائيًا تحرير الموارد المستخدمة من قبل الكائن cmd.
    • هذا يضمن أنه حتى إذا حدث استثناء أو خطأ، سيتم التخلص من الكائنات المفتوحة مثل cmd.

ملخص الكود:

  • يقوم الكود بتنفيذ استعلام SQL لاسترجاع جميع البيانات من الجدول المحدد بواسطة المستخدم من ComboBox cbTables.
  • يتم ترتيب البيانات حسب العمود st_name.
  • يتم تحميل البيانات المسترجعة إلى DataTable dtNew.
  • بعد ذلك، يتم ربط DataTable مع DataGridView dgvTempDB ليتم عرض النتائج في واجهة المستخدم.
  • يتم إغلاق الاتصال بقاعدة البيانات بعد الانتهاء.

الهدف من الكود:

الهدف من هذا الكود هو استرجاع بيانات من جدول معين في قاعدة بيانات أو ملف Excel وعرضها في DataGridView لتمكين المستخدم من معاينة البيانات المسترجعة.



الكود كاملا داخل زر  -  btn_browse

Private Sub btn_browse_Click(sender As Object, e As EventArgs) Handles btn_browse.Click

        OFD.Filter = "File Formats (*.XLSX; *.XLS;) | *.xlsx; *.xls;"

        If OFD.ShowDialog = DialogResult.OK Then

            tbFilePath.Text = Path.GetDirectoryName(OFD.FileName)

            tbFileName.Text = Path.GetFileName(OFD.FileName)

            connection.ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0; Data Source=" & tbFilePath.Text & "\" & tbFileName.Text & "; Extended Properties= Excel 12.0;"

            Dim restrictions() As String = New String(3) {}

            restrictions(3) = "Table"

 

            Dim dtTables As New DataTable

            dtTables.Clear()

            connection.Open()

            dtTables = connection.GetSchema("Tables", restrictions)

            connection.Close()

            cbTables.Items.Clear()

 

            Dim i As Integer

            For i = 0 To dtTables.Rows.Count - 1 Step i + 1

                cbTables.Items.Add(dtTables(i)(2).ToString)

            Next

            cbTables.SelectedIndex = 0

 

            Dim dtNew As New DataTable

            dtNew.Clear()

 

            Using cmd As New OleDbCommand("SELECT * FROM [" & cbTables.Text & "] ORDER BY st_name", connection)

                cmd.CommandType = CommandType.Text

                cmd.CommandTimeout = 420

                connection.Open()

                dtNew.Load(cmd.ExecuteReader)

                dgvTempDB.DataSource = dtNew

                connection.Close()

            End Using

 

        End If

    End Sub

إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مزيد من التوضيح، فلا تتردد في طرحها!


يمكنكم متابعة الدرس عن طريق اليوتيوب





تعليقات

المشاركات الشائعة من هذه المدونة

7 | Display column's stages from the database into ComboBox's Stage - VB.NET & SQL Server

26 | Filter Students List based on students' stage and Group in DataGridView - VB.NET & SQL Server

8 | Get selected Stage and Group IDs from their ComboBoxes - VB.NET & SQL Server