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

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

2 голосов
/ 12 декабря 2008

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

Ответы [ 7 ]

5 голосов
/ 12 декабря 2008

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

1 голос
/ 12 декабря 2008

С здесь :

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

0 голосов
/ 12 декабря 2008

Возможно, SQLCMD / L подойдет вам.

0 голосов
/ 12 декабря 2008

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

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

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

Удачи

0 голосов
/ 12 декабря 2008

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

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

0 голосов
/ 12 декабря 2008

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

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

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

0 голосов
/ 12 декабря 2008

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

...