查找本地网络上的所有SQL Server实例

时间:2014-04-16 14:37:16

标签: c# sql sql-server sql-server-2008

我正在尝试将所有可用的SQL Server命名为其实例名称,我能够在本地LAN上找到所有可用的SQL Server名称,但我无法在某些SQL Server上找到它们的实例名称

我需要SQL Server实例名称,因为某些服务器具有默认实例,而某些服务器具有特定实例名称,如pcname\sqlexpress

我是这个代码来获取所有SQL Server实例..

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

我得到了这些结果..

enter image description here

2 个答案:

答案 0 :(得分:1)

有很多理由说明为什么这个电话会全部或部分失败。

From MSDN

  

列表可能会因超时和网络流量等因素而异。这可能导致两个连续呼叫的列表不同。仅列出同一网络上的服务器。广播数据包通常不会遍历路由器,这就是为什么您可能看不到列出的服务器,但它会在呼叫之间保持稳定。   列出的服务器可能有也可能没有其他信息,如IsClustered和版本。这取决于如何获得列表。通过SQL Server浏览器服务列出的服务器将具有比通过Windows基础结构找到的服务器更多的详细信息,Windows基础结构将仅列出名称。

     

只有在完全信任的情况下运行时才能使用服务器枚举。在部分受信任的环境中运行的程序集将无法使用它,即使它们具有SqlClientPermission代码访问安全性(CAS)权限也是如此。   SQL Server通过使用名为SQL Browser的外部Windows服务为SqlDataSourceEnumerator提供信息。默认情况下启用此服务,但管理员可以将其关闭或禁用它,使服务器实例对此类不可见。

正如@Orlando所说,这可能会给你一些解决方案:

Find all instances of sql server programmatically

答案 1 :(得分:0)

运行一个在C#端执行此操作的存储过程

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

并将其返回到数据表中,然后使用它们。