http://topic.csdn.net/t/20011020/13/331531.html

解决方案 »

  1.   

    扫描局域网中所有电脑的1433端口-----------------------------------貌似MS就是这样做的,我们局域网内有人的SqlServer改了端口点活动服务器就找不到了这个效率是很低,你用查询分析器登陆的时候点那个查询活动服务器也是很慢的
      

  2.   

    如果你用 ADO.NET 2.0, 则 MSDN 上就有现成的功能
    -----------------------------------------------------------------
    SQL Server 2000 和 SQL Server 2005 均允许应用程序在当前的网络中查找 SQL Server 实例。SqlDataSourceEnumerator 类向应用程序开发人员公开此信息,提供包含所有可见服务器的信息的 DataTable。此返回的表包含网络上可用服务器实例的列表(该列表与用户尝试创建新连接时提供的列表匹配),并展开“连接属性”对话框上包含所有可用服务器的下拉列表。显示的结果并非总是完整的。注意 
    与大多数 Windows 服务一样,最好使用尽可能少的权限运行 SQL 浏览器服务。有关 SQL 浏览器服务以及如何管理其行为的更多信息,请参见“SQL Server 联机图书”。
     
      

  3.   

    以下控制台应用程序检索所有可见 SQL Server 实例的信息并在控制台窗口中显示该信息。Visual Basic  复制代码:==============================================================================
    Imports System.Data.SqlModule Module1
      Sub Main()
        ' Retrieve the enumerator instance and then the data.
        Dim instance As SqlDataSourceEnumerator = _
         SqlDataSourceEnumerator.Instance
        Dim table As System.Data.DataTable = instance.GetDataSources()    ' Display the contents of the table.
        DisplayData(table)    Console.WriteLine("Press any key to continue.")
        Console.ReadKey()
      End Sub  Private Sub DisplayData(ByVal table As DataTable)
        For Each row As DataRow In table.Rows
          For Each col As DataColumn In table.Columns
            Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
          Next
          Console.WriteLine("============================")
        Next
      End Sub
    End Module
     
      

  4.   

    C#  复制代码 
    =========================================================================using System.Data.Sql;class Program
    {
      static void Main()
      {
        // Retrieve the enumerator instance and then the data.
        SqlDataSourceEnumerator instance =
          SqlDataSourceEnumerator.Instance;
        System.Data.DataTable table = instance.GetDataSources();    // Display the contents of the table.
        DisplayData(table);    Console.WriteLine("Press any key to continue.");
        Console.ReadKey();
      }  private static void DisplayData(System.Data.DataTable table)
      {
        foreach (System.Data.DataRow row in table.Rows)
        {
          foreach (System.Data.DataColumn col in table.Columns)
          {
            Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
          }
          Console.WriteLine("============================");
        }
      }
    }
     
      

  5.   

    另外, 枚举依赖于 SQL Server 的配置, 如果 SQL Server 实例配置为不提供枚举所需要的信息(例如 sql 2000 设置了隐藏服务, sql 2005 关闭了 sql browser 服务)则枚举是无效的(这个是安全的需要)
      

  6.   

    我装的是vs2003,没找到SqlDataSourceEnumerator类,可能是vs2005里才有。刚才在MSDN上查到用ODBC来实现的方法,网上有人写了一个demo。链接分别为:http://www.aspxboy.com/private/5315/default.aspx
    Enumerate SQL Server Instances in C#, Using ODBChttp://msdn2.microsoft.com/en-us/library/ms712446.aspx
    SQL Server Browsing Example