2008-12-12 114 views
2

我在寫一個連接到SQL服務器的數據庫應用程序。我想實現一個類似於SQL Management Studio中的連接對話框。我已經找到了一種方法來獲取服務器上的數據庫列表,但我真的很想獲取網絡上可用服務器的列表,因此最終用戶不必輸入服務器的名稱/ IP 。瀏覽SQL服務器

回答

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

0

不知道是否有一個適當的方式,但一個黑客將嘗試連接到端口1433(默認MSSQLSERVER端口)連接到機器在你的網絡中。

0

工具SQLPing sqlsecurity.com 舊版本下載包含可能有用的源代碼。

實際上,您需要在網絡上的每個IP地址上查詢端口1434 UDP。 但是,防火牆和策略將阻止此操作。

注意:1434是您在服務器上枚舉SQL實例的位置。 如果你只使用默認實例,那麼端口1433就可以。除非它被「隱藏」在端口2433上...

0

如果可以的話,您最好猜測的是預先填充列表。

掃描SQL服務器的網絡可能不是最好的主意(慢,不可靠)。

0

一開始可能會得到MS Network monitor並查看它在單擊MSSMS中的下拉列表時的功能。

我的猜測是(當你點擊那個下拉菜單時有點滯後)是它輪詢本地網絡。

說了這麼一句話,在我的辦公室裏,它似乎輪詢了多於本地的 netowork,因爲它獲得的是公司網絡內但其他子網內的服務器。

好運

5

如果您使用.NET開發的程序,你可以使用SMO對象做到這一點。使用Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers方法獲取本地網絡中運行的所有sql服務器的列表。
掃描幾秒鐘,但它不是很慢。

+0

我想到的是一種更簡單的方法。好的符文 – 2008-12-12 17:18:49

0

也許SQLCMD/L將爲您工作。