SQL Server는 애플리케이션이 현재 네트워크 내에서 SQL Server 인스턴스를 찾을 수 있도록 허용합니다. 클래스는 SqlDataSourceEnumerator 이 정보를 애플리케이션 개발자에게 노출하여 DataTable 표시되는 모든 서버에 대한 정보를 제공합니다. 이 반환된 테이블에는 사용자가 새 연결을 만들려고 할 때 제공된 목록과 일치하는 네트워크에서 사용할 수 있는 서버 인스턴스 목록이 포함되어 있으며 연결 속성 대화 상자에서 사용 가능한 모든 서버가 포함된 드롭다운 목록을 확장합니다. 표시되는 결과가 항상 완료되지는 않습니다.
비고
대부분의 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
추가 정보가 있을 수도 있고 없을 수도 있습니다. 이는 목록을 가져온 방법에 따라 달라집니다. SQL Server 브라우저 서비스를 통해 나열된 서버에는 이름만 나열되는 Windows 인프라를 통해 찾은 서버보다 더 많은 세부 정보가 있습니다.
비고
서버 열거형은 완전 신뢰에서 실행되는 경우에만 사용할 수 있습니다. 부분적으로 신뢰할 수 있는 환경에서 실행되는 어셈블리는 CAS(코드 액세스 보안) 권한이 있더라도 SqlClientPermission 사용할 수 없습니다.
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("============================");
}
}
}