SQL Server의 인스턴스 열거(ADO.NET)
SQL Server는 애플리케이션이 현재 네트워크 내에서 SQL Server 인스턴스를 찾을 수 있도록 허용합니다. SqlDataSourceEnumerator 클래스에서는 애플리케이션 개발자에게 이 정보를 노출시켜 표시되는 모든 서버에 대한 정보가 포함된 DataTable을 제공합니다. 이 반환된 테이블은 사용자가 새 연결을 만들려고 할 때 제공되는 목록과 일치하는 네트워크상에서 사용 가능한 서버 인스턴스의 목록을 포함하며, Connection Properties 대화 상자에서 사용 가능한 모든 서버가 포함된 드롭다운 목록을 확장합니다. 표시되는 결과가 항상 완전하지는 않습니다.
참고 항목
대부분의 Windows 서비스와 마찬가지로, SQL Browser 서비스도 최소 권한으로 실행하는 것이 좋습니다.
열거자 인스턴스 검색
사용 가능한 SQL Server 인스턴스에 대한 정보가 포함된 테이블을 검색하려면 먼저 공유/정적 Instance 속성을 사용하여 열거자를 검색해야 합니다.
Dim instance As System.Data.Sql.SqlDataSourceEnumerator = _
System.Data.Sql.SqlDataSourceEnumerator.Instance
System.Data.Sql.SqlDataSourceEnumerator instance =
System.Data.Sql.SqlDataSourceEnumerator.Instance
정적 인스턴스를 검색했으면 GetDataSources 메서드를 호출할 수 있습니다. 이 메서드는 사용 가능한 서버의 정보가 포함된 DataTable을 반환합니다.
Dim dataTable As System.Data.DataTable = instance.GetDataSources()
System.Data.DataTable dataTable = instance.GetDataSources();
메서드 호출에서 반환된 테이블에는 다음 열이 포함되어 있으며, 모든 열은 string
값을 포함합니다.
열 | 설명 |
---|---|
데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 | 서버의 이름입니다. |
InstanceName | 서버 인스턴스의 이름입니다. 서버가 기본 인스턴스로 실행 중인 경우 비어 있습니다. |
IsClustered | 서버가 클러스터의 일부인지 여부를 나타냅니다. |
버전 | 서버 버전입니다. 예시: - 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) |
열거 제한
사용 가능한 모든 서버가 나열되거나 나열되지 않을 수 있습니다. 이 목록은 시간 제한 및 네트워크 트래픽 등의 요인에 따라 달라질 수 있습니다. 이로 인해 두 번의 연속 호출에서 목록이 다를 수 있습니다. 동일한 네트워크에 있는 서버만 나열됩니다. 브로드캐스트 패킷은 일반적으로 라우터를 순회하지 않기 때문에 나열된 서버를 표시하지 않을 수는 있지만 여러 호출에서 안정적입니다.
나열된 서버는 IsClustered
및 버전 등의 추가 정보를 제공하거나 제공하지 않을 수 있습니다. 제공 여부는 목록을 가져온 방법에 따라 달라집니다. SLQ Server 브라우저 서비스를 통해 나열된 서버에서는 Windows 인프라에서 찾은 정보(이름)보다 더 자세한 정보를 제공합니다.
참고 항목
서버 열거는 완전 신뢰로 실행되는 경우에만 사용할 수 있습니다. 부분적으로 신뢰할 수 있는 환경에서 실행되는 어셈블리는 SqlClientPermission CAS(코드 액세스 보안) 권한을 가지고 있더라도 서버 열거를 사용할 수 없습니다.
SQL Server는 SQL Browser라는 외부 Windows 서비스를 사용하여 SqlDataSourceEnumerator에 대한 정보를 제공합니다. 이 서비스는 기본적으로 사용할 수 있지만 관리자는 이 서비스의 설정을 해제하거나 비활성화하여 이 클래스에 서버 인스턴스를 노출시키지 않을 수 있습니다.
예시
다음 콘솔 애플리케이션에서는 표시되는 모든 SQL Server 인스턴스에 대한 정보를 검색하여 콘솔 창에 표시합니다.
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("============================");
}
}
}