2012-07-26 76 views
1

我正在创建使用SQL Server 2008的Windows窗体应用程序。在我有的安装项目中,如果需要,请在目标机器上检查并安装SQL Server 2008。我需要的是一种获得SQL Server 2008的方法 - 以及2008年的唯一实例名称。如何查找包含默认实例的SQL Server 2008实例

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

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

  1. 这可能是从SQL Server 2008中遗留下来的默认实例安装,从而赢得无法访问我的应用程序使用的数据库。跳过它然后检查其他命名实例很可能不会返回任何内容。

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

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

有没有办法做到这一点?

+0

我想我有一个使用SqlDataSourceEnumerator的解决方案。通过使用此实例成员的GetDataSources()方法,它看起来像默认实例显示,但只给出默认实例运行的机器的名称。没有提供版本信息,这给我造成了一个问题。 – MWinstead 2012-07-27 19:34:54

+0

看看我的答案,试试吧! – MAXE 2012-08-28 12:11:34

回答

2

使用应该使用类System.Data.Sql命名空间的SqlDataSourceEnumerator(组装System.Data.dll),这样一来:

SqlDataSourceEnumerator sdsEnumerator = SqlDataSourceEnumerator.Instance; 

DataTable sqlServerInstances = sdsEnumerator.GetDataSources(); 

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

由于使用SqlDataSourceEnumerator在网络上找到数据源的机制的性质,该方法不会总是返回可用的服务器的完整列表,该列表可能不如果您打算使用此函数让用户从列表中选择服务器,请确保始终提供一个选项,以便键入不在列表中的名称,以防服务器枚举出现不会返回所有可用的服务器,此外,此方法可能需要大量时间才能执行,因此在性能至关重要时请谨慎操作。

方法GetDataSource是你所需要的:here the documentation,返回你所需要的所有信息一DataTable

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

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

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

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

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

相关问题