SQL Server 2000 及 SQL Server 2005 均允許應用程式在目前網路內尋找 SQL Server 執行個體。 SqlDataSourceEnumerator 類別會將此資訊公開至應用程式開發人員,並提供包含所有可見伺服器之相關資訊的 DataTable。 這個傳回的資料表包含網路上可用伺服器執行個體的清單 (該清單與使用者嘗試建立新連接時所提供的清單相符),並展開包含 [連接屬性] 對話方塊上所有可用伺服器的下拉式清單。 顯示的結果不一定是完整的。
注意事項 |
|---|
與大部分的 Windows 服務一樣,最好使用儘可能少的權限來執行 SQL Browser 服務。如需 SQL Browser 服務及如何管理其行為的詳細資訊,請參閱《SQL Server 線上叢書》。 |
擷取列舉值執行個體
若要擷取包含可用 SQL Server 執行個體相關資訊的資料表,必須先使用共用/靜態 Instance 屬性擷取列舉值:
Dim instance As System.Data.Sql.SqlDatSourceEnumerator = _
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 值):
欄 |
說明 |
|---|---|
ServerName |
伺服器名稱。 |
InstanceName |
伺服器執行個體的名稱。 如果伺服器做為預設執行個體執行,則此處為空白。 |
IsClustered |
表示伺服器是否為叢集的一部分。 |
Version |
伺服器版本 (SQL Server 2000 為 8.00.x,SQL Server 2005 為 9.00.x)。 |
列舉型別限制
可能會,也可能不會列出所有可用的伺服器。 此清單需視逾時及網路流量之類的因素而定。 這可能會導致兩個連續呼叫的清單不同, 而只會列出相同網路上的伺服器。 廣播封包通常不會周遊路由器,因此您可能看不到某個列出的伺服器,但它在所有呼叫中都是穩定的。
列出的伺服器不一定具有 IsClustered 及版本之類的其他資訊。 這要視取得清單的方式而定。 透過 SQL Server 瀏覽器服務列出的伺服器所具有的詳細資訊,要多於透過 Windows 基礎結構找到的伺服器 (僅列出名稱)。
注意事項 |
|---|
只有在完全信任下執行時,伺服器列舉型別才可使用。執行在部分信任環境中的組件即使具有 SqlClientPermission 程式碼存取安全性 (CAS) 使用權限,也無法使用伺服器列舉型別。 |
SQL Server 2000 內部提供了 SqlDataSourceEnumerator 的資訊。 不過,SQL Server 2005 可藉由使用名為 SQL Browser 的外部 Windows 服務來提供資訊。 依預設會啟用此服務,但系統管理員可能會關閉或停用服務,讓此類別看不到伺服器執行個體。 此服務僅適用於 SQL Server 2005,因此對 SQL Server 2000 的行為不會有影響。
注意事項 |
|---|
硬體或軟體可能會限制瀏覽 SQL Server 執行個體的能力。如需開啟通訊埠以進行瀏覽的詳細資訊,請參閱知識庫文件:如何在執行 Windows XP Service Pack 2 的系統上使用指令碼,以程式設計方式開啟通訊埠,讓 SQL Server 使用。 |
範例
下列主控台應用程式會擷取所有可見 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("============================");
}
}
}
注意事項