Просмотр для серверов SQL

Я пишу приложение базы данных, которое подключается к серверу SQL. Я хотел бы реализовать подобное диалоговое окно подключения, как в SQL Management Studio. Я уже нашел способ получить список баз данных на сервере, но мне бы очень хотелось получить список доступных серверов в сети, чтобы конечным пользователям не приходилось вводить имя / IP-адрес сервера ,

12.12.2008 16:51:11
7 ОТВЕТОВ
РЕШЕНИЕ

От сюда :

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 здесь

1
12.12.2008 16:59:36

Не уверен, что существует правильный способ, но одним из способов было бы попытаться подключиться к порту 1433 (порт mssqlserver по умолчанию) к компьютерам в вашей сети.

0
12.12.2008 17:00:55

Инструмент SQLPing от sqlsecurity.com. Более старые версии загрузок содержат исходный код, который может быть полезен.

По сути, вам нужно запросить порт 1434 UDP на каждый IP-адрес в вашей сети. Тем не менее, брандмауэры и политики будут блокировать это.

Примечание. 1434 - это место, где вы перечисляете экземпляры SQL на сервере. Если вы используете только экземпляры по умолчанию, то порт 1433 подойдет. Если только он не «спрятан» в порту 2433 ...

0
12.12.2008 17:01:04

Лучше всего было бы заранее заполнить список, если вы можете.

Сканирование сети на наличие SQL-серверов, вероятно, не лучшая идея (медленная, ненадежная).

0
12.12.2008 17:02:28

Для начала можно получить монитор MS Network и посмотреть, что он делает, если щелкнуть раскрывающийся список в MSSMS.

Я предполагаю (с задержкой, когда вы нажимаете этот выпадающий список), что он опрашивает локальную сеть.

Сказав это, в моем офисе, кажется, опрашивает не только локальную сеть, поскольку она получает серверы, которые находятся внутри корпоративной сети, но в других подсетях.

Удачи

0
12.12.2008 17:09:51

Если вы разрабатываете свою программу в .Net, вы можете использовать объекты SMO для этого. Используйте метод Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers, чтобы получить список всех серверов sql, работающих в вашей локальной сети.
Сканирование занимает несколько секунд, но оно не очень медленное.

5
12.12.2008 17:13:56
Да. SMO - действительно хороший и мощный пакет
Rune Grimstad 13.12.2008 13:29:00

Возможно, SQLCMD / L будет работать для вас.

0
12.12.2008 17:25:02