如何查找 SQL Server 2008 实例,包括默认实例

Posted

技术标签:

【中文标题】如何查找 SQL Server 2008 实例,包括默认实例【英文标题】:How to find a SQL Server 2008 instance, including default instance 【发布时间】:2012-07-26 22:19:50 【问题描述】:

我正在创建一个使用 SQL Server 2008 的 Windows 表单应用程序。在我拥有的安装项目中,如果需要,我会在目标计算机上检查并安装 SQL Server 2008。我需要的是一种获取 SQL Server 2008 - 并且只有 2008 - 实例名称的方法。

现在我正在使用SmoApplication.EnumAvailableSqlServers 函数并检查返回的版本,但我发现它没有显示默认实例。这对我来说是个问题,因为如果在我的安装程序在目标机器上设置 SQL Server 2008 之后运行该程序,则没有可用的命名实例 - 只有默认实例。

我不想只是盲目地检查传统的MSSQLSERVER 默认实例是否有效,原因有两个:

    它可能是 SQL Server 2008 安装遗留下来的默认实例,它无法访问我的应用程序使用的数据库。跳过它然后检查其他命名实例很可能不会给我任何回报。

    它也可能是较新版本的 SQL Server 2012 的默认实例。虽然此实例能够访问我的数据库,但我的经验是,它随后会将数据库“升级”到新的 SQL Server 版本,而早期版本将无法访问它。由于我的应用程序旨在与 SQL Server 2008 一起使用,这给我带来了一些问题。

所以我需要使用任何 SQL Server 2008 命名实例,或者如果是 2008 则使用默认实例。

有什么办法吗?

【问题讨论】:

我认为我有一个使用 SqlDataSourceEnumerator 的解决方案。通过使用 this 的 Instance 成员的 GetDataSources() 方法,它看起来像默认实例显示,但只给出了运行默认实例的机器的名称。没有提供版本信息,这给我带来了问题。 看看我的回答,试试看! 【参考方案1】:

使用应该使用System.Data.Sql命名空间(程序集System.Data.dll)的类SqlDataSourceEnumerator,这样:

SqlDataSourceEnumerator sdsEnumerator = SqlDataSourceEnumerator.Instance;

DataTable sqlServerInstances = sdsEnumerator.GetDataSources();

这些类不需要安装 Sql Server,但可以检索有关任何 Sql Server 实例的信息。提醒这一点:

"

由于 SqlDataSourceEnumerator 用于在网络上定位数据源的机制的性质,该方法不会总是返回可用服务器的完整列表,并且每次调用时该列表可能都不相同。如果您打算使用此功能让用户从列表中选择服务器,请确保您始终提供一个选项以键入不在列表中的名称,以防服务器枚举未返回所有可用服务器.此外,此方法可能会花费大量时间来执行,因此在性能至关重要时调用它时要小心。

"

GetDataSource 方法是您所需要的:here the documentation,返回一个 DataTable,其中包含您需要的所有信息:

服务器名称 服务器的名称。

实例名称 服务器实例的名称。如果服务器作为默认实例运行,则为空白。

集群 指示服务器是否是集群的一部分。

版本 服务器版本(SQL Server 2000 为 8.00.x,SQL Server 2005 为 9.00.x,SQL Server 2008 为 10.00.x,SQL Server 2008 R2 为 10.50.x,SQL Server 2012 为 11.00.x)。

你可以找到SqlDataSourceEnumeratorhere类的完整参考。

【讨论】:

以上是关于如何查找 SQL Server 2008 实例,包括默认实例的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2008安装问题

如何在SQL server 2008 新建两个实例

如何将 SQL Server 2008 R2 SSIS 包升级到 SQL Server 2016?

如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?

如何获取 SQL Server 2008 R2 的服务包?

如何连接到 SQL Server 2008 Express 的本地实例