我正在尝试将所有可用的SQL Server命名为其实例名称,我能够在本地LAN上找到所有可用的SQL Server名称,但我无法在某些SQL Server上找到它们的实例名称
我需要SQL Server实例名称,因为某些服务器具有默认实例,而某些服务器具有特定实例名称,如pcname\sqlexpress
我是这个代码来获取所有SQL Server实例..
DataTable dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources();
我得到了这些结果..
答案 0 :(得分:1)
有很多理由说明为什么这个电话会全部或部分失败。
列表可能会因超时和网络流量等因素而异。这可能导致两个连续呼叫的列表不同。仅列出同一网络上的服务器。广播数据包通常不会遍历路由器,这就是为什么您可能看不到列出的服务器,但它会在呼叫之间保持稳定。 列出的服务器可能有也可能没有其他信息,如IsClustered和版本。这取决于如何获得列表。通过SQL Server浏览器服务列出的服务器将具有比通过Windows基础结构找到的服务器更多的详细信息,Windows基础结构将仅列出名称。
只有在完全信任的情况下运行时才能使用服务器枚举。在部分受信任的环境中运行的程序集将无法使用它,即使它们具有SqlClientPermission代码访问安全性(CAS)权限也是如此。 SQL Server通过使用名为SQL Browser的外部Windows服务为SqlDataSourceEnumerator提供信息。默认情况下启用此服务,但管理员可以将其关闭或禁用它,使服务器实例对此类不可见。
正如@Orlando所说,这可能会给你一些解决方案:
答案 1 :(得分:0)
运行一个在C#端执行此操作的存储过程
select @@servername + '\' + @@servicename
并将其返回到数据表中,然后使用它们。