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

Sql server 如何查找SQL Server 2008实例,包括默认实例,sql-server,find,default,instance,Sql Server,Find,Default,Instance,我正在创建一个使用SQL Server 2008的Windows窗体应用程序。在我拥有的安装项目中,我检查SQL Server 2008,如果需要,在目标计算机上安装SQL Server 2008。我需要的是一种获取SQLServer2008(并且只有2008)实例名称的方法 现在我正在使用SmoApplication.EnumAvailableSqlServers函数并检查返回的版本,但我发现它没有显示默认实例。这对我来说是有问题的,因为如果在目标计算机上安装SQL Server 2008之后

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

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

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

  • 它可能是SQLServer2008安装后留下的默认实例,无法访问我的应用程序使用的数据库。跳过它,然后检查其他命名实例很可能不会返回任何结果

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

  • 因此,我需要使用任何SQLServer2008命名实例,如果是2008,则使用默认实例


    有什么方法可以做到这一点吗?

    Use应该使用
    System.Data.Sql
    命名空间(assembly
    System.Data.dll
    )的类
    SqlDataSourceEnumerator
    ,方法如下:

    SqlDataSourceEnumerator sdsEnumerator = SqlDataSourceEnumerator.Instance;
    
    DataTable sqlServerInstances = sdsEnumerator.GetDataSources();
    
    这些类不需要安装Sql Server,但可以检索有关任何Sql Server实例的信息。提醒大家:

    "

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

    "

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

    ServerName 服务器的名称

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

    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

    我以为我有一个使用SqlDataSourceEnumerator的解决方案。通过使用该实例成员的GetDataSources()方法,看起来会显示默认实例,但只给出运行默认instanc eis的机器的名称。没有提供版本信息,这给我带来了一个问题。看看我的答案,试试看!