2012-01-18 61 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列(列集)

服務器名稱 實例名 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

我留下的那些行,因爲只有想證明我使用哪種技術。問題在於InstanceName是空的。 – humcfc

+0

檢查您的防火牆和SQL Server Browser服務。請參閱[本](http://blogs.msdn.com/b/sql_protocols/archive/2005/09/24/473502.aspx)和[this](http://blogs.msdn.com/b/sql_protocols/ archive/2005/09/23/473339.aspx) – IUnknown

+0

無法按照我想要的方式修改防火牆。用ManagedComputer解決它。無論如何感謝您的回覆。 – humcfc