[英]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指出的那樣,這可能會為您提供一些解決方案:
運行在C#端執行此操作的存儲過程
select @@servername + '\' + @@servicename
並將其返回到數據表中,然后使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.