如何查找 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)。
你可以找到SqlDataSourceEnumerator
here类的完整参考。
【讨论】:
以上是关于如何查找 SQL Server 2008 实例,包括默认实例的主要内容,如果未能解决你的问题,请参考以下文章
如何将 SQL Server 2008 R2 SSIS 包升级到 SQL Server 2016?