Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Найти все SQLServer'ы на локальном компе

2.2K
21 июня 2006 года
0cool
54 / / 15.06.2006
Здравствуйте, у меня вопрос:
как на C# узнать имена всех локальных серверов.
273
22 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=0cool]Здравствуйте, у меня вопрос:
как на C# узнать имена всех локальных серверов.[/quote]
Есть несколько способов:
1) Через SqlDataSourceEnumerator
2) SMO
3) SQLDMO
4) Реестр Windows

Самый первый самый простой:
 
Код:
[SIZE=2][/SIZE][SIZE=2][COLOR=#008080]SqlDataSourceEnumerator[/COLOR][/SIZE][SIZE=2] sqlServers = [/SIZE][SIZE=2][COLOR=#008080]SqlDataSourceEnumerator[/COLOR][/SIZE][SIZE=2].Instance;
[/SIZE][SIZE=2][COLOR=#008080]DataTable[/COLOR][/SIZE][SIZE=2] dataSources = sqlServers.GetDataSources();
[/SIZE][SIZE=2][COLOR=#0000ff]foreach[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#008080]DataRow[/COLOR][/SIZE][SIZE=2] row [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][SIZE=2] dataSources.Rows)
[/SIZE][SIZE=2][COLOR=#0000ff]foreach[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#008080]DataColumn[/COLOR][/SIZE][SIZE=2] column [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][SIZE=2] dataSources.Columns)
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].WriteLine([/SIZE][SIZE=2][COLOR=#800000]"{0} = {1}"[/COLOR][/SIZE][SIZE=2], column.Caption, row[column]);
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].ReadKey();
[/SIZE]

Или через реестр:
 
Код:
[SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][SIZE=2] Microsoft.Win32;
[/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#008080][/COLOR][/SIZE]
[SIZE=2][COLOR=#008080]RegistryKey[/COLOR][/SIZE][SIZE=2] regKey = [/SIZE][SIZE=2][COLOR=#008080]Registry[/COLOR][/SIZE][SIZE=2].LocalMachine.OpenSubKey([/SIZE][SIZE=2][COLOR=#800000]"SOFTWARE\\Microsoft\\Microsoft SQL Server"[/COLOR][/SIZE][SIZE=2]);
[/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2][] names = ([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2][])regKey.GetValue([/SIZE][SIZE=2][COLOR=#800000]"InstalledInstances"[/COLOR][/SIZE][SIZE=2]);
[/SIZE][SIZE=2][COLOR=#0000ff]foreach[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] sqlServerName [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][SIZE=2] names)
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].WriteLine(sqlServerName);
regKey.Close();
[/SIZE]
2.2K
22 июня 2006 года
0cool
54 / / 15.06.2006
спасибо за помошь,
но почему-то первый способ не работает.
может этот из-за того, что я не подключил какую-то сборку.
весь MSDN перерыл, но даже ссылки не
нашел на эту тему.
а может потому , что у меня NET2003
273
23 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=0cool]спасибо за помошь,
но почему-то первый способ не работает.
может этот из-за того, что я не подключил какую-то сборку.
весь MSDN перерыл, но даже ссылки не
нашел на эту тему.
а может потому , что у меня NET2003[/quote]
Можно через SMO (Добавь ссылку в проект на библиотеку Microsoft.SqlServer.Smo.dll):
 
Код:
[SIZE=2][COLOR=#008080]DataTable[/COLOR][/SIZE][SIZE=2] servers = [/SIZE][SIZE=2][COLOR=#008080]SmoApplication[/COLOR][/SIZE][SIZE=2].EnumAvailableSqlServers([/SIZE][SIZE=2][COLOR=#0000ff]true[/COLOR][/SIZE][SIZE=2]); [/SIZE][SIZE=2][COLOR=#008000]//если поставишь false, будет ещё и сетевые искать
[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#0000ff]foreach[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#008080]DataRow[/COLOR][/SIZE][SIZE=2] row [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][SIZE=2] servers.Rows)
[/SIZE][SIZE=2][COLOR=#0000ff]foreach[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#008080]DataColumn[/COLOR][/SIZE][SIZE=2] column [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][SIZE=2] servers.Columns)
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].WriteLine([/SIZE][SIZE=2][COLOR=#800000]"{0} = {1}"[/COLOR][/SIZE][SIZE=2], column.Caption, row[column]);
[/SIZE]
273
23 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
Первый способ не работает в .NET 1.x, только в .NET 2.x, т.к. там нет класса SqlDataSourceEnumerator
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог