2

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

4

7 回答 7

5

如果您在 .Net 中开发程序,您可以使用 SMO 对象来执行此操作。使用 Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers 方法获取本地网络中运行的所有 sql 服务器的列表。
扫描需要几秒钟,但不是很慢。

于 2008-12-12T17:13:56.627 回答
1

这里

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 方法

于 2008-12-12T16:59:36.220 回答
0

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

于 2008-12-12T17:00:55.933 回答
0

来自sqlsecurity.com的工具 SQLPing 旧版本下载包含可能有用的源代码。

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

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

于 2008-12-12T17:01:04.530 回答
0

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

扫描网络以查找 SQL 服务器可能不是最好的主意(缓慢、不可靠)。

于 2008-12-12T17:02:28.117 回答
0

开始可能是获取MS 网络监视器,然后在单击 MSSMS 中的下拉菜单时查看它的作用。

我的猜测是(当您单击该下拉菜单时会有延迟)是它轮询本地网络。

话虽如此,在我的办公室里,它似乎比本地网络轮询更多,因为它获取位于公司网络内但在其他子网上的服务器。

祝你好运

于 2008-12-12T17:09:51.410 回答
0

也许 SQLCMD /L 会为你工作。

于 2008-12-12T17:25:02.767 回答