我正在创建一个使用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的默认实例。
有没有办法做到这一点?
答案 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的完整参考资料。