Sql server 浏览SQL Server

Sql server 浏览SQL Server,sql-server,windows-networking,Sql Server,Windows Networking,我正在编写一个连接到SQL server的数据库应用程序。我想实现一个类似于SQLManagementStudio中的连接对话框。我已经找到了获取服务器上数据库列表的方法,但我确实希望获取网络上可用服务器的列表,这样最终用户就不必键入服务器的名称/IP。来源: 另一种SQL DMO方法不确定是否有合适的方法,但有一种方法是尝试将端口1433(默认mssqlserver端口)连接到网络中的计算机。从 旧版本下载包含可能有用的源代码 实际上,您需要在网络上的每个IP地址上查询端口1434 UDP。

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

来源:


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

从 旧版本下载包含可能有用的源代码

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

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

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

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

一个开始可能是当您单击MSMS中的下拉列表时,获取并查看它的功能

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

话虽如此,在我的办公室里,它的民意调查似乎多于本地网络,因为它获得的服务器位于公司网络内,但位于其他子网上


祝你好运

如果你在.Net中开发你的程序,你可以使用SMO对象来完成。使用Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers方法获取本地网络中运行的所有sql Server的列表。

扫描需要几秒钟,但速度不是很慢。

也许SQLCMD/L适合您。

是的。SMO是一个非常好和强大的软件包
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