浏览SQL Server

时间:2008-12-12 16:51:11

标签: sql-server windows-networking

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

7 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

来自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 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

如果可以,最好的猜测是提前填写清单。

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

答案 5 :(得分:0)

一个开始可能是获取MS Network monitor并查看单击MSSMS中的下拉菜单时的操作。

我的猜测是(点击该下拉列表时出现滞后)是它轮询本地网络。

话虽如此,在我的办公室里,它似乎比 local netowork更多地投票,因为它获得了公司网络内但在其他子网上的服务器。

祝你好运

答案 6 :(得分:0)

也许SQLCMD / L适合你。