SQL Server-példányok számbavétele (ADO.NET)

Az SQL Server lehetővé teszi az alkalmazások számára, hogy sql server-példányokat keressenek az aktuális hálózaton belül. Az SqlDataSourceEnumerator osztály ezeket az információkat az alkalmazás fejlesztőjének teszi elérhetővé, és DataTable az összes látható kiszolgálóról tartalmaz információkat. Ez a visszaadott tábla a hálózaton elérhető kiszolgálópéldányok listáját tartalmazza, amelyek megegyeznek a felhasználó új kapcsolat létrehozásakor megadott listájával, és kibontja a Kapcsolat tulajdonságai párbeszédpanel összes elérhető kiszolgálóját tartalmazó legördülő listát. A megjelenített eredmények nem mindig teljesek.

Megjegyzés:

A legtöbb Windows-szolgáltatáshoz hasonlóan a legjobb, ha az SQL Browser szolgáltatást a lehető legkevesebb jogosultsággal futtatja.

Enumerator-példány lekérése

Az elérhető SQL Server-példányokkal kapcsolatos információkat tartalmazó tábla lekéréséhez először le kell kérnie egy enumerátort a megosztott/statikus Instance tulajdonság használatával:

Dim instance As System.Data.Sql.SqlDataSourceEnumerator = _
   System.Data.Sql.SqlDataSourceEnumerator.Instance
System.Data.Sql.SqlDataSourceEnumerator instance =
   System.Data.Sql.SqlDataSourceEnumerator.Instance

Miután lekérte a statikus példányt, meghívhatja a GetDataSources metódust, amely az DataTable elérhető kiszolgálókra vonatkozó információkat ad vissza:

Dim dataTable As System.Data.DataTable = instance.GetDataSources()
System.Data.DataTable dataTable = instance.GetDataSources();

A metódushívásból visszaadott tábla a következő oszlopokat tartalmazza, amelyek mindegyike értékeket tartalmaz string :

oszlop Leírás
Kiszolgálónév A kiszolgáló neve.
InstanceName A kiszolgálópéldány neve. Üres, ha a kiszolgáló alapértelmezett példányként fut.
IsClustered Azt jelzi, hogy a kiszolgáló egy fürt része-e.
verzió A kiszolgáló verziója. Például:

- 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)

Számbavételi korlátozások

Lehetséges, hogy az elérhető kiszolgálók nem mind szerepelnek a listán. A lista az olyan tényezőktől függően változhat, mint az időtúllépések és a hálózati forgalom. Ez azt eredményezheti, hogy a lista két egymást követő hívásban eltérő lehet. Csak az ugyanazon a hálózaton lévő kiszolgálók lesznek felsorolva. Az adási csomagok általában nem jutnak át az útválasztókon, ezért előfordulhat, hogy egy kiszolgáló nem látható a listán, de a hívások során stabil marad.

Előfordulhat, hogy a felsorolt kiszolgálók további információkkal( például IsClustered és verzióval) rendelkeznek. Ez a lista beszerzésének módjától függ. Az SQL Server böngészőszolgáltatáson keresztül felsorolt kiszolgálóknak több részlete lesz, mint a Windows-infrastruktúrán keresztüliaknak, amelyek csak a nevet sorolják fel.

Megjegyzés:

A kiszolgáló enumerálása csak teljes megbízhatósági kapcsolaton belül futtatva érhető el. A részben megbízható környezetben futó összeállítások akkor sem fogják tudni használni, ha rendelkeznek a SqlClientPermission Kódhozzáférési Biztonság (CAS) engedéllyel.

Az SQL Server információkat biztosít a SqlDataSourceEnumerator számára az SQL Browser nevű külső Windows-szolgáltatás használatával. Ez a szolgáltatás alapértelmezés szerint engedélyezve van, de a rendszergazdák kikapcsolhatják vagy letilthatják azt, így a kiszolgálópéldány láthatatlanná válik ebben az osztályban.

példa

Az alábbi konzolalkalmazás lekéri az összes látható SQL Server-példány adatait, és megjeleníti az adatokat a konzolablakban.

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

Lásd még