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()
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)
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
: تعني أن الاستعلام هو استعلام نصي (أي استعلام SQL عادي).cmd.CommandTimeout = 420
: يتم تحديد الحد الأقصى لمدة تنفيذ الاستعلام قبل أن ينتهي الاتصال. القيمة 420 تشير إلى 420 ثانية (أي ٧ دقائق).
cmd.CommandType = CommandType.Text
cmd.CommandTimeout = 420
cmd.CommandType = CommandType.Text
cmd.CommandTimeout = 420
٤. فتح الاتصال وتنفيذ الاستعلام:
connection.Open()
dtNew.Load(cmd.ExecuteReader)
connection.Open()
dtNew.Load(cmd.ExecuteReader)
connection.Open()
: يقوم بفتح الاتصال بقاعدة البيانات أو ملف Excel.
dtNew.Load(cmd.ExecuteReader)
: ينفذ الاستعلام باستخدامExecuteReader
، الذي يُرجع كائنOleDbDataReader
يحتوي على البيانات المسترجعة من الاستعلام. بعد ذلك، يتم تحميل البيانات إلىDataTable
dtNew
.
٥. ربط النتائج بـ DataGridView:
dgvTempDB.DataSource = dtNew
: يعينDataTable
dtNew
كمصدر بيانات لـDataGridView
dgvTempDB
.- هذا يعني أن
DataGridView
سيعرض البيانات المسترجعة من قاعدة البيانات أو ملف Excel في واجهة المستخدم.
dgvTempDB.DataSource = dtNew
٦. إغلاق الاتصال:
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
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
إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مزيد من التوضيح، فلا تتردد في طرحها!
تعليقات
إرسال تعليق