Menghitung instans SQL Server (ADO.NET)
SQL Server memungkinkan aplikasi untuk menemukan SQL Server dalam jaringan saat ini. Kelas SqlDataSourceEnumerator mengekspos informasi ini ke pengembang aplikasi, memberikan DataTable informasi yang berisi tentang semua server yang terlihat. Tabel yang dikembalikan ini berisi daftar instans server yang tersedia di jaringan yang cocok dengan daftar yang disediakan saat pengguna mencoba membuat koneksi baru, dan memperluas daftar drop-down yang berisi semua server yang tersedia pada kotak dialog Properti Koneksi. Hasil yang ditampilkan tidak selalu lengkap.
Catatan
Seperti kebanyakan layanan Windows, yang terbaik adalah menjalankan layanan SQL Server Browser dengan hak istimewa yang paling tidak mungkin.
Mengambil Instans Enumerator
Untuk mengambil tabel yang berisi informasi tentang instans SQL Server yang tersedia, Anda harus terlebih dahulu mengambil enumerator, menggunakan properti bersama/statisInstance:
Dim instance As System.Data.Sql.SqlDataSourceEnumerator = _
System.Data.Sql.SqlDataSourceEnumerator.Instance
System.Data.Sql.SqlDataSourceEnumerator instance =
System.Data.Sql.SqlDataSourceEnumerator.Instance
Setelah Anda mengambil instans statis, Anda bisa memanggil metode GetDataSources, yang mengembalikan DataTable yang berisi informasi tentang server yang tersedia:
Dim dataTable As System.Data.DataTable = instance.GetDataSources()
System.Data.DataTable dataTable = instance.GetDataSources();
Tabel yang dikembalikan dari panggilan metode berisi kolom berikut, yang semuanya berisi nilai string
:
Kolom | Deskripsi |
---|---|
ServerName | Nama server. |
InstanceName | Nama instans server. Kosong jika server berjalan sebagai instans default. |
IsClustered | Menunjukkan apakah server adalah bagian dari kluster. |
Versi | Versi server. Misalnya: - 9.00.x (SQL Server 2005) - 10.0.xx (SQL Server 2008) - 10.50.x (SQL Server 2008 R2) - 11.0.xx (SQL Server 2012) |
Batasan Enumerasi
Semua server yang tersedia mungkin atau mungkin tidak terdaftar. Daftar bisa bervariasi tergantung pada faktor-faktor seperti batas waktu dan lalu lintas jaringan. Hal ini bisa menyebabkan daftar menjadi berbeda pada dua panggilan berturut-turut. Hanya server di jaringan yang sama yang akan terdaftar. Paket siaran biasanya tidak akan melintasi router, itulah sebabnya Anda mungkin tidak melihat server terdaftar, tetapi akan stabil di seluruh panggilan.
Server yang terdaftar mungkin atau mungkin tidak memiliki informasi tambahan seperti IsClustered
dan versi. Ini tergantung pada bagaimana daftar itu diperoleh. Server yang terdaftar melalui layanan browser SQL Server akan memiliki lebih banyak detail daripada yang ditemukan melalui infrastruktur Windows, yang hanya akan mencantumkan namanya.
Catatan
Pencacahan server hanya tersedia saat berjalan dengan kepercayaan penuh. Rakitan yang berjalan di lingkungan yang tepercaya sebagian tidak akan bisa menggunakannya, bahkan jika mereka memiliki SqlClientPermission izin Keamanan Akses Kode (CAS).
SQL Server menyediakan informasi untuk SqlDataSourceEnumerator melalui penggunaan layanan Windows eksternal bernama SQL Browser. Layanan ini diaktifkan secara default, tetapi administrator bisa mematikannya atau menonaktifkannya, membuat instans server tidak terlihat oleh kelas ini.
Contoh
Aplikasi konsol berikut mengambil informasi tentang semua instans SQL Server yang terlihat dan menampilkan informasi di jendela konsol.
Imports System.Data.Sql
Module Module1
Sub Main()
' Retrieve the enumerator instance and then the data.
Dim instance As SqlDataSourceEnumerator = _
SqlDataSourceEnumerator.Instance
Dim table As System.Data.DataTable = instance.GetDataSources()
' Display the contents of the table.
DisplayData(table)
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Sub
Private Sub DisplayData(ByVal table As DataTable)
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
Next
Console.WriteLine("============================")
Next
End Sub
End Module
using System.Data.Sql;
class Program
{
static void Main()
{
// Retrieve the enumerator instance and then the data.
SqlDataSourceEnumerator instance =
SqlDataSourceEnumerator.Instance;
System.Data.DataTable table = instance.GetDataSources();
// Display the contents of the table.
DisplayData(table);
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
private static void DisplayData(System.Data.DataTable table)
{
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
}
Console.WriteLine("============================");
}
}
}