Bagikan melalui


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("============================");  
    }  
  }  
}  

Lihat juga