代码之家  ›  专栏  ›  技术社区  ›  Joe Chin

浏览SQL服务器

  •  2
  • Joe Chin  · 技术社区  · 17 年前

    我正在编写一个连接到SQL Server的数据库应用程序。我想实现类似于SQL Management Studio中的连接对话框。我已经找到了一种方法来获取服务器上的数据库列表,但我真的想获取网络上可用服务器的列表,这样最终用户就不必输入服务器的名称/IP。

    7 回复  |  直到 11 年前
        1
  •  1
  •   Galwegian    17 年前

    here :

    CREATE PROCEDURE dbo.ListLocalServers 
    AS 
    BEGIN 
        SET NOCOUNT ON 
    
        CREATE TABLE #servers(sname VARCHAR(255)) 
    
        INSERT #servers EXEC master..XP_CMDShell 'OSQL -L' 
        -- play with ISQL -L too, results differ slightly 
    
        DELETE #servers WHERE sname='Servers:' 
    
        SELECT LTRIM(sname) FROM #servers WHERE sname != 'NULL' 
    
        DROP TABLE #servers 
    END
    

    备选SQL DMO方法 here

        2
  •  5
  •   Rune Grimstad    17 年前

    如果您正在.NET中开发您的程序,那么可以使用SMO对象来实现这一点。使用microsoft.sqlserver.management.smo.smoapplication.enumavailablesqlservers方法获取在本地网络中运行的所有SQL服务器的列表。
    扫描需要几秒钟,但不是很慢。

        3
  •  0
  •   Espen    17 年前

    不确定是否有合适的方法,但有一种方法是尝试将端口1433(默认的mssqlserver端口)连接到网络中的计算机。

        4
  •  0
  •   gbn    17 年前

    工具sqlping-from sqlsecurity.com 旧版本下载包含可能有用的源代码。

    实际上,您需要在网络上的每个IP地址上查询端口1434udp。 但是,防火墙和策略会阻止这一点。

    注意:1434用于枚举服务器上的SQL实例。 如果只使用默认实例,那么端口1433就可以了。除非它在2433端口“隐藏”…

        5
  •  0
  •   Piskvor left the building Rohit Kumar    17 年前

    如果可以的话,最好是提前填充列表。

    扫描网络中的SQL服务器可能不是最好的主意(速度慢,不可靠)。

        6
  •  0
  •   Greg B    17 年前

    一个开始可能是 MS Network monitor 并查看单击mssms中的下拉列表时的操作。

    我的猜测是(当你点击下拉列表时会有延迟)它会对本地网络进行投票。

    说到这里,在我的办公室里,它似乎比 地方的 netowork的原理是,它获取的服务器位于公司网络内,但位于其他子网上。

    祝你好运

        7
  •  0
  •   Sam    17 年前

    也许sqlcmd/l可以为您服务。

    推荐文章