none
枚举 SQL Server 的实例 RRS feed

  • 问题

  • 官方的方法是:

    SQL Server 2000 和 SQL Server 2005 均允许应用程序在当前的网络中查找 SQL Server 实例。SqlDataSourceEnumerator 类向应用程序开发人员公开此信息,提供包含所有可见服务器的信息的 DataTableInstanceName

    服务器实例的名称。如果服务器作为默认实例运行,则为空白。这个默认实例名称是什么呢?假如是express版的是 SQLEXPRESS,如果是其他版本则是MSSQLSERVER,这个要怎么处理呢?

    2012年7月3日 14:36

全部回复

  • 您好,请参见以下代码。

    DataTable dt = new DataTable();
    string ProviderName = "System.Data.SqlClient";
    DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
    
    if (factory.CanCreateDataSourceEnumerator)
    {
        Console.WriteLine("found");
        DbDataSourceEnumerator dsenum = factory.CreateDataSourceEnumerator();
        dt = dsenum.GetDataSources();
    }
    else
    {
        Console.Write("Data source enumeration is not supported by provider");
        Console.ReadLine();
    }


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月6日 2:59
    版主
  • 谢谢,不过你运行下就会发现只有第一行有实例名称,其余的都为空。这就是我上边说的“假如使用默认实例名称则为空”。不过既然第一行有实例名,而后边的都省略,是不是意味着后边的跟第一行的其实是一样的呢?
    2012年7月6日 3:44
  • 您好,这段代码列出的是可用实例,可用来创建datasource的实例名。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月6日 4:53
    版主
  • 嗯,你说的对,我了解你的意思。现在是这样一个问题,假如局域网有一台名为2010PC机器上装了sql server 2008 express,且使用的默认实例名称,用你提供的这种方法(或官方的方法)都将只得到2010PC这个字段,别的字段都是空值。在构造连接字符串时,需要自行添加\SQLexpress才能成功。当然,这个自行添加也无妨,但是假如装的不是express而是专业版,默认实例名称就不再是2010PC\SQLEXPRES,这样就得判断到底装的什么版本才能构造正确的连接字符串。
    2012年7月6日 6:51