[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]
Найти все SQLServer'ы на локальном компе
как на C# узнать имена всех локальных серверов.
как на C# узнать имена всех локальных серверов.[/quote]
Есть несколько способов:
1) Через SqlDataSourceEnumerator
2) SMO
3) SQLDMO
4) Реестр Windows
Самый первый самый простой:
Код:
Или через реестр:
Код:
[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]
[/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]
но почему-то первый способ не работает.
может этот из-за того, что я не подключил какую-то сборку.
весь MSDN перерыл, но даже ссылки не
нашел на эту тему.
а может потому , что у меня NET2003
но почему-то первый способ не работает.
может этот из-за того, что я не подключил какую-то сборку.
весь 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]
[/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]
Первый способ не работает в .NET 1.x, только в .NET 2.x, т.к. там нет класса SqlDataSourceEnumerator