2012-01-18 4 views
1

Я полностью смущен тем, как получить экземпляр локального SQL-сервера. Единственное, что я получаю, это имена серверов. Вот различные подходы я пытался:Получить имя экземпляра локального сервера sql

DataTable availableServers = SmoApplication.EnumAvailableSqlServers([All of the 3 inputs]); 
foreach (DataRow serverRow in availableServers.Rows) 
{ 
    // foreach row list "Name", "Server", "Instance" etc... 
} 

и

SqlDataSourceEnumerator sdse = SqlDataSourceEnumerator.Instance; 
DataTable table = sdse.GetDataSources(); 
foreach (DataRow row in table.Rows) 
{ 
    // foreach row list "ServerName", "InstanceName", "IsClustered" and "Version" 
} 

и

ManagedComputer mc = new ManagedComputer(); 
ServerInstance instance = mc.ServerInstances; 

Есть ли какой-то другой способ, я могу получить имя локального экземпляра SQL Server?

Я знаю, что при подключении к SQL-серверу в студии управления диалог подключения отображает мой локальный экземпляр как. \ Sqlexpress или (local) \ sqlexpress. Также при развертывании установки базы данных в InstallShield InstallShield «locate sqlserver» -dialog получает правильный экземпляр для моего локального хоста. Что они делают правильно?

ответ

1

Вы можете использовать ManagedComputer

using Microsoft.SqlServer.Management.Smo.Wmi; 
.... 

ManagedComputer mc = new ManagedComputer(); 

foreach (ServerInstance si in mc.ServerInstances) 
{ 
    Console.WriteLine("The installed instance name is " + si.Name); 
} 
+0

Это была третья попытка, которую я отобразил в своем вопросе. Имя пусто. – humcfc

+1

Возможно, это проблема конфигурации. Я предполагаю, что экземпляр находится на одной машине? Попробовали настройку [ProviderArchitecture] (http://social.msdn.microsoft.com/Forums/en-US/sqlsmoanddmo/thread/32201c6b-a67d-4a40-9504-cc073ee2a20c/)? mc.ConnectionSettings.ProviderArchitecture = ProviderArchitecture.XXX –

+0

Большое спасибо! Придется установить ProviderArchitecture.Use64bit – humcfc

0

Вы уже достигли половины этапа со вторым образцом кода, который вы опубликовали. DataTable вернулся будет иметь 4 столбцов (набор столбцов)

ServerName InstanceName IsClustered Версии

Вы можете перечислить через эту коллекцию, чтобы получить значение в DataTable, как это.

foreach (System.Data.DataRow row in table.Rows) 
{ 
    foreach (System.Data.DataColumn col in table.Columns) 
    { 
    Console.WriteLine("{0} = {1}", col.ColumnName, row[col]); 
    }  
} 
+0

Я оставил эти строки, потому что только хотел показать, какие методы, которые я использовал. Проблема в том, что имя экземпляра пуст. – humcfc

+0

Проверьте брандмауэр и службу браузера SQL Server. См. [This] (http://blogs.msdn.com/b/sql_protocols/archive/2005/09/24/473502.aspx) и [это] (http://blogs.msdn.com/b/sql_protocols/ архив/2005/09/23/473339.aspx) – IUnknown

+0

Невозможно изменить брандмауэр так, как я хочу. Вместо этого он решил использовать ManagedComputer. Спасибо за ваш ответ. – humcfc

Смежные вопросы