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