簡體   English   中英

在本地網絡上查找所有SQL Server實例

[英]Find all SQL Server instances on local nework

我正在嘗試使用其實例名稱來命名所有可用的SQL Server,我能夠在本地LAN上找到所有可用的SQL Server名稱,但在某些SQL Server上卻找不到它們的實例名稱

我需要SQL Server實例名稱,因為某些服務器具有默認實例,而某些服務器具有特定的實例名稱,例如pcname\\sqlexpress

我是這段代碼來獲取所有SQL Server實例..

 DataTable dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources();

而我得到這些結果..

在此處輸入圖片說明

有很多原因導致此調用全部或部分失敗。

從MSDN

該列表可能會因超時和網絡流量等因素而有所不同。 這可能導致列表在兩個連續的呼叫中不同。 僅列出同一網絡上的服務器。 廣播數據包通常不會穿過路由器,這就是為什么您可能看不到列出的服務器的原因,但是它在所有呼叫中都是穩定的。 列出的服務器可能具有也可能沒有其他信息,例如IsClustered和版本。 這取決於列表的獲取方式。 通過SQL Server瀏覽器服務列出的服務器將比通過Windows基礎結構找到的服務器具有更多詳細信息,Windows基礎結構僅列出名稱。

僅在完全信任下運行時,服務器枚舉才可用。 即使它們具有SqlClientPermission代碼訪問安全性(CAS)權限,在部分受信任的環境中運行的程序集也將無法使用它。 SQL Server通過使用名為SQL Browser的外部Windows服務為SqlDataSourceEnumerator提供信息。 默認情況下啟用此服務,但是管理員可以關閉或禁用此服務,從而使服務器實例對該類不可見。

正如@Orlando指出的那樣,這可能會為您提供一些解決方案:

以編程方式查找SQL Server的所有實例

運行在C#端執行此操作的存儲過程

select @@servername + '\' + @@servicename

並將其返回到數據表中,然后使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM