2009-07-08 56 views
1

誰能告訴我如何使用c#和SMO或任何api獲取遠程Sqlserver實例?如何獲取特定機器的SqlInstances列表

我有一個遠程服務器名稱 「RemoteMC」,其中有SQL Server的兩個實例: 「RemoteMc」 和 「RemoteMC \ SQLEXPRESS」

我試圖讓實例在這樣的代碼:

Server srv=new Server("RemoteMC"); 
DataTable dt=SmoApplication.EnumAvailableSqlServer(true); 

但它返回「Host \ sqlexpress」

我不知道哪裏出了問題。我怎樣才能得到的結果早在:

RemoteMC
RemoteMC \ SQLEXPRESS;

回答

5

SmoApplication.EnumAvailableSqlServers方法是你在找什麼。有3個重載,和其中的一個需要服務器名string參數。

它返回一個DataTable其行具有領域,如VersionnameIsLocal等。

您需要添加對SMO庫的引用,並且您可能希望在您的C#文件的頂部有「using Microsoft.SqlServer.Management.Smo;」。

有關SQL SMO的介紹,請參閱http://www.sqldbatips.com/showarticle.asp?ID=34

編輯:一些代碼來解決這方面的問題(我還沒有編譯或運行此):

編輯:.Rows增加的foreach,以便它可以編譯。

DataTable dataTable = SmoApplication.EnumAvailableSqlServers(false); 

foreach (DataRow dataRow in dataTable.Rows) 
{ 
    if ((dataRow["Server"] as string) == "MyServerName") 
     Console.WriteLine(dataRow["Instance"] as string); 
} 
+0

使用我得到本地SQL發現我only.How可以去遠程sqlDiscovery.means我可以運行應用程序,那麼它應該去指定的機器和檢索信息,以我的本地machine.if我使用EnumAvailableSqlServers (true)它給予本地只有當我傳遞字符串,命名實例的遠程只來,如果另外2多存在o遠程我不會得到它們。 – Cute 2009-07-08 11:52:57

0

一種方式來做到這一點是看在本地計算機上的註冊表項「」軟件\微軟\ Microsoft SQL Server的\實例名稱\ SQL \」。你被允許閱讀在你的解決方案註冊表?

1

使用內置的方式。

System.Data.Sql.SqlDataSourceEnumerator 
相關問題