当您拥有服务器名称时,如何列出SQL Server的实例名称?

时间:2016-11-11 21:30:43

标签: .net sql-server instance

计算机上可以有多个sql server实例。我正在尝试识别在任何给定的REMOTE机器上运行的每个sql server引擎实例。其他问题中的所有其他答案仅适用于本地机器。

我看过SqlDataSourceEnumerator并搜索网络,我知道要搜索的计算机。

我见过SmoApplication.EnumAvailableSqlServers,但它需要'实例名称',这正是我正在寻找的

如何使用.net查询SQL Server实例信息的计算机?

2 个答案:

答案 0 :(得分:1)

此博客显示如何列出计算机上安装的sql server实例using System.ServiceProcess;

https://blogs.msdn.microsoft.com/sqlserverfaq/2009/03/07/how-to-detect-sql-server-instances-features-installed-on-a-machine/

我缺少的关键是ServiceController.GetService()静态方法有一个带有字符串'servername'的重载

class InstanceInfoRetriever
    {
        public IEnumerable<string> GetInstanceNames(string serverName)
        {
            var servicenames = new[] { "MSSQL", "SQL Server" };
            var services = ServiceController.GetServices(serverName);
            var sqlservices = services.Where(s => servicenames.Any(n => s.ServiceName.Contains(n)));
            return sqlservices.Select(s => s.ServiceName);

        }
    }

答案 1 :(得分:0)

尝试以下

idx = pd.Series(np.arange(6), index=list("abcdef")).compress(lambda x: x % 2 == 0).index

Index(['a', 'c', 'e'], dtype='object') 是机器名称

或尝试使用Linq

Dim dt as dataTable= SqlDataSourceEnumerator.Instance.GetDataSources()

For each dr as datarow in dt.Select("[ServerName] = '" & strServername & "'")

Msgbox(string.Concat(dr("ServerName"), "\\", dr("InstanceName"))))

NEXT