23-12-24, 03:59 PM
لتنفيذ هذه المهمة، تحتاج إلى الاستفادة من مكتبة SqlClient في .NET لتحديد السيرفرات وقواعد البيانات. هنا شرح تفصيلي مع كود عملي:
الخطوات:
1. تعبئة السيرفرات في
الأول:
الثاني:
الكود:
vb
نسخ الكود
الشرح:
المخرجات:
الخطوات:
1. تعبئة السيرفرات في
كود :
ComboBox- يمكن استخدام الفئة SqlDataSourceEnumerator للحصول على قائمة بأسماء السيرفرات المثبتة على الجهاز.
كود :
ComboBox- بعد اختيار السيرفر من
ComboBox - الأول، يمكن استخدام اتصال إلى السيرفر لاسترداد قائمة قواعد البيانات باستخدام استعلام SQL.
الكود:
vb
نسخ الكود
كود :
Imports System.Data.Sql
Imports System.Data.SqlClient
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' تعبئة السيرفرات عند تحميل الشاشة
FillServers()
End Sub
' تعبئة السيرفرات في ComboBox الأول
Private Sub FillServers()
Try
Dim serversTable As DataTable = SqlDataSourceEnumerator.Instance.GetDataSources()
ComboBox1.Items.Clear()
For Each row As DataRow In serversTable.Rows
Dim serverName As String = row("ServerName").ToString()
Dim instanceName As String = If(row("InstanceName").ToString() <> "", "\" & row("InstanceName").ToString(), "")
ComboBox1.Items.Add(serverName & instanceName)
Next
Catch ex As Exception
MessageBox.Show("خطأ في الحصول على السيرفرات: " & ex.Message)
End Try
End Sub
' حدث اختيار السيرفر من ComboBox الأول
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim selectedServer As String = ComboBox1.SelectedItem.ToString()
FillDatabases(selectedServer)
End Sub
' تعبئة قواعد البيانات في ComboBox الثاني
Private Sub FillDatabases(serverName As String)
Try
Dim connectionString As String = $"Data Source={serverName};Integrated Security=True;"
Using connection As New SqlConnection(connectionString)
connection.Open()
' استعلام للحصول على قواعد البيانات
Dim cmd As New SqlCommand("SELECT name FROM sys.databases WHERE state = 0", connection)
Dim reader As SqlDataReader = cmd.ExecuteReader()
ComboBox2.Items.Clear()
While reader.Read()
ComboBox2.Items.Add(reader("name").ToString())
End While
reader.Close()
End Using
Catch ex As Exception
MessageBox.Show("خطأ في الحصول على قواعد البيانات: " & ex.Message)
End Try
End Sub
End Classالشرح:
- تعبئة السيرفرات (
FillServers - ):
- الفئة SqlDataSourceEnumerator تقوم بإرجاع جدول يحتوي على أسماء السيرفرات المثبتة.
- يتم دمج اسم السيرفر مع اسم المثيل (Instance Name) إن وجد.
- الفئة SqlDataSourceEnumerator تقوم بإرجاع جدول يحتوي على أسماء السيرفرات المثبتة.
- تعبئة قواعد البيانات (
FillDatabases - ):
- يتم استخدام اتصال بـ SQL Server باستخدام Integrated Security لاسترداد قواعد البيانات.
- يتم تشغيل استعلام على جدول النظام
sys.databases - للحصول على أسماء قواعد البيانات التي في حالة نشطة.
- يتم استخدام اتصال بـ SQL Server باستخدام Integrated Security لاسترداد قواعد البيانات.
- التفاعل مع
ComboBox - :
- عند تغيير الاختيار في
ComboBox1 - (حدث
SelectedIndexChanged - )، يتم تعبئة
ComboBox2 - بقواعد البيانات.
- عند تغيير الاختيار في
المخرجات:
- عند تشغيل البرنامج:
-
ComboBox1
- يتم تعبئته تلقائيًا بأسماء السيرفرات.
- عند اختيار سيرفر،
ComboBox2 - يُعرض أسماء قواعد البيانات الخاصة به.
- يجب تشغيل البرنامج على جهاز يمكنه الوصول إلى السيرفرات المحلية.
- إذا كنت بحاجة إلى مصادقة SQL (Username/Password)، يمكنك تعديل سلسلة الاتصال:
vb
نسخ الكود
Dim connectionString As String = $"Data Source={serverName};User ID=YourUsername;Password=YourPassword;"

