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

时间:2012-07-26 22:19:51

标签: sql-server find default instance

我正在创建一个使用SQL Server 2008的Windows表单应用程序。在我安装的安装项目中,我检查并在必要时在目标计算机上安装SQL Server 2008。我需要的是一种获取SQL Server 2008(仅限2008)实例名称的方法。

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

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

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

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

  3. 所以我需要使用任何SQL Server 2008命名实例,或者它是2008的默认实例。

    有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

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

SqlDataSourceEnumerator sdsEnumerator = SqlDataSourceEnumerator.Instance;

DataTable sqlServerInstances = sdsEnumerator.GetDataSources();

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

"

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

"

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

<强>服务器名称 服务器名称。

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

<强> IsClustered 指示服务器是否是群集的一部分。

版本 服务器版本(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的完整参考资料。