powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Sql серверы
22 сообщений из 22, страница 1 из 1
Sql серверы
    #32445551
sharper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Как можно получить список SQL серверов в сети.
...
Рейтинг: 0 / 0
Sql серверы
    #32445565
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользуй SQLDМО обьект, лежит в папке сервера.

Magnus
...
Рейтинг: 0 / 0
Sql серверы
    #32445568
Eyeless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сысылаешься в проете на SQLDMO.dll
добавляешь в проект
Код: plaintext
using SQLDMO

затем вот так:
Код: plaintext
1.
SQLDMO.ApplicationClass app = new ApplicationClass();
       SQLDMO.NameList servers = app.ListAvailableSQLServers();

Дальше присоединяешься ко мне в борьбе с System.InvalidCastException.
(Смотри тему SQLDMO)
...
Рейтинг: 0 / 0
Sql серверы
    #32445772
sharper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все так и сделал, только вот опять выдает sqlApp.SQLServers.Count = 0,
а у меня их целых СЕМЬ штук в одной группе :((
...
Рейтинг: 0 / 0
Sql серверы
    #32445853
Eyeless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код покажешь?
...
Рейтинг: 0 / 0
Sql серверы
    #32446037
sharper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да короче элементарный код:

если писать так
SQLDMO.ApplicationClass sqlAppl = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = sqlAppl.ListAvailableSQLServers();

то на 2 строчке выдает "QueryInterface for interface SQLDMO.NameList failed."

а если взять sqlAppl.SQLServers.Count, то дает ноль
...
Рейтинг: 0 / 0
Sql серверы
    #32449317
Eyeless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел как все это борется:
Во-первых с QueryInterface Failed он обваливается в старой версии этого СОМа. Надо патчиться. А список серверов можно получить, если у тебя правильно прописаны их алиасы в Client Network Utility.

Я бы изменил мир, но бог не дает исходники...
...
Рейтинг: 0 / 0
Sql серверы
    #32449381
Eyeless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если есть желание, могу подорить работающий SQLDMO.dll


Я бы изменил мир, но бог не дает исходники...
...
Рейтинг: 0 / 0
Sql серверы
    #32449536
sharper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай, раз такое дело :)
пришли на magomedov@front.ru
Заранее благодарю!
...
Рейтинг: 0 / 0
Sql серверы
    #32450095
Artur Muradian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Коллеги.

У меня тоже точно такая проблемма.
Пожалуйста поделитесь с работающей SQLDМО.
e-mail: m_artur@web.am

Спасибо.
...
Рейтинг: 0 / 0
Sql серверы
    #32451163
avg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь

http://www.codeproject.com/csharp/servercombobox.asp

есть отличный код для получения списка SQL серверов (и нетолько SQL) без использования DMO
...
Рейтинг: 0 / 0
Sql серверы
    #32452146
Artur Muradian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ссылку avg.
Но у меня проблема не только с получением списка серверов, так что нужна SQLDMO.
...
Рейтинг: 0 / 0
Sql серверы
    #32452749
avg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У каждого свои проблемы :)

Вот только если есть сервер, если есть к нему доступ (имеется в виду БД master) - то можно сделать все, что умеет SQLDMO и ещё гораздо больше -средствами TSQL.
...
Рейтинг: 0 / 0
Sql серверы
    #32458131
Eyeless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Краткий экскурс в SQLDMO:

Получение списка серверов:

Код: plaintext
1.
SQLDMO.Application m_App = new SQLDMO.ApplicationClass();
         SQLDMO.NameList m_List = m_App.ListAvailableSQLServers();


Доступ к списку серверов через NameList.Item(int a);
Эта коллекция индексируется с 1.

Список БД через интерфейс _Database;

При подключении к SQL-серверу, если нет желания передавать логин и пароль,
следует использовать примерно такой код:

Код: plaintext
1.
2.
3.
SQLServer2 m_Serv = new SQLServer2Class();
[color=red]m_Serv.LoginSecure = true;[/color]
         m_Serv.Connect(myserver, null [это логин], null [это пароль]);




Я бы изменил мир, но бог не дает исходники...
...
Рейтинг: 0 / 0
Sql серверы
    #32458883
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В соседнем топике уже отрапортовались, дополню и здесь картину.
SQLDMO имеет ряд встроенных багов.
Один из них выпадает при попытках получить список серверов.
Лечение> установка SP3 на сервер.
Проверено, работает.

Magnus
...
Рейтинг: 0 / 0
Sql серверы
    #32459442
avg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЛечение> установка SP3 на сервер.
Проверено, работает.
Ага, у меня в сети порядка 10 серверов и только половина из них под 3 сервис паком. Остальные (по разным причинам, иногда оправданным) под 2 и обновлятся в ближайшее время не будут. Да и не разработчика ПО это дело сервера обновлять, на это DBA имеются. А если у всех клиентов еще и вместо DBA сервис паки накатывать...
...
Рейтинг: 0 / 0
Sql серверы
    #32459596
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СП3 нужен на машине которая опрашивает. На остальных не обязательно

Magnus
...
Рейтинг: 0 / 0
Sql серверы
    #32460162
avg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСП3 нужен на машине которая опрашивает. На остальных не обязательно

Я не понял (серьезно) - для возможности получения списка серверов с использованием SQLDMO в своем клиентском приложении я должен установить на клиента SQL сервер (даже если только clients tools) и облить его (их) 3 сервис паком ???
...
Рейтинг: 0 / 0
Sql серверы
    #32460977
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно тебе нужен только SQLDMO из третьего сервис пака.
Этим обьектом пользуется сам сиквел для собственных телодвижений.

Кстати, вот только что накопал код, который делает тоже самое но сам в себе, без SQLDMO.
Он на VBNET но думаю не составит труда конвертануть.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
Public Structure ServerInfo
Friend ServerName As String
Friend InstanceName As String
Friend IsClustered As Boolean
Friend Version As String
Friend TCPPort As Long
Friend IPAddress As String
End Structure

Public Sub Start()
Dim objSQLServers() As ServerInfo = EnumSQLServer()
End Sub

Friend Function EnumSQLServer() As ServerInfo()
Dim objUDPClient As New System.Net.Sockets.UdpClient
Dim objRemoteIP As System.Net.IPEndPoint
Dim objAllServers() As ServerInfo
Dim bytData() As Byte = { 2 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
 0 ,  0 ,  0 ,  0 }
Dim bytReceived() As Byte
Dim strInfo() As String
Dim strHostHeaders() As String
Dim booDone As Boolean = False
Dim i As Long
Dim x As Int16

ReDim strHostHeaders( 0 )
objUDPClient.Send(bytData,  18 , "255.255.255.255", "1434")
While booDone = False
Try
bytReceived = objUDPClient.Receive(objRemoteIP)
Catch
booDone = True
Exit While
End Try
If strHostHeaders(strHostHeaders.Length -  1 ) <> "" Then
ReDim Preserve strHostHeaders(strHostHeaders.Length)
End If
strHostHeaders(strHostHeaders.Length -  1 ) =
Mid(System.Text.ASCIIEncoding.ASCII.GetString(bytReceived),  4 )
strHostHeaders(strHostHeaders.Length -  1 ) &= ";IPADDRESS;" &
objRemoteIP.Serialize.Item( 4 ).ToString & "." &
objRemoteIP.Serialize.Item( 5 ).ToString & "." &
objRemoteIP.Serialize.Item( 6 ).ToString & "." &
objRemoteIP.Serialize.Item( 7 ).ToString
If strHostHeaders.Length >  1  Then
If strHostHeaders(strHostHeaders.Length -  1 ) =
strHostHeaders(strHostHeaders.Length -  2 ) Then ReDim Preserve
strHostHeaders(strHostHeaders.Length -  2 )
End If
End While
objUDPClient.Close()
objUDPClient = Nothing

ReDim objAllServers(strHostHeaders.Length -  1 )
For i =  0  To strHostHeaders.Length -  1 
strInfo = Split(strHostHeaders(i), ";")
For x =  0  To strInfo.Length -  1 
Select Case LCase(strInfo(x))
Case "servername"
objAllServers(i).ServerName = strInfo(x +  1 )
Case "instancename"
objAllServers(i).InstanceName = strInfo(x +  1 )
Case "isclustered"
objAllServers(i).IsClustered = IIf(LCase(strInfo(x +
 1 )) = "no", False, True)
Case "version"
objAllServers(i).Version = strInfo(x +  1 )
Case "tcp"
objAllServers(i).TCPPort = CLng(strInfo(x +  1 ))
Case "ipaddress"
objAllServers(i).IPAddress = strInfo(x +  1 )
End Select
Next
Next
Return objAllServers
End Function


Magnus
...
Рейтинг: 0 / 0
Sql серверы
    #32461010
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для sqldmo есть соответствующий merge module. Вот его и нужно ставить клиентам, при условии, что дистрибутив использует Windows Installer.
...
Рейтинг: 0 / 0
Sql серверы
    #32461018
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще через АПИ, как вариант.

Magnus
...
Рейтинг: 0 / 0
Sql серверы
    #32461335
avg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно.

По ссылке, что я приводил выше:

http://www.codeproject.com/csharp/servercombobox.asp

как раз через NetAPI и получают список, причем не только SQL серверов, но и рабочих станций, контроллеров домена и т.д.
А этот код на VB тоже очень интересный. Надо будет попробовать!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Sql серверы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]