2009-07-08 13 views
1

誰でもC#とSMOまたは任意のAPIを使用してリモートSqlServerインスタンスを取得する方法を教えてもらえますか?特定のマシンのSqlInstancesのリストを取得する方法

私は、SQL Serverの2つのインスタンスがあるリモートサーバー名 "RemoteMC"、持っている: "RemoteMc" と "RemoteMCの\ SQLEXPRESS"

私はこのようなコードでインスタンスを取得しよう:

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

"Host \ sqlexpress"を返します。

何が問題になったのか分かりません。どのように私は戻って結果を得ることができます。

RemoteMC
RemoteMCの\ SQLEXPRESS;

?ローカルマシンの下

答えて

5

SmoApplication.EnumAvailableSqlServers方法は3つのオーバーロードがあります。あなたが探しているもので、そのうちの一つは、サーバー名のstringパラメータを取ります。

それは、その行などVersionnameIsLocal、などの分野を持っているDataTableを返します。

SMOライブラリへの参照を追加する必要があります。おそらくC#ファイルの上部に "using Microsoft.SqlServer.Management.Smo;"が必要です。

SQL SMTの紹介については、http://www.sqldbatips.com/showarticle.asp?ID=34を参照してください。

EDIT

EDIT:それはコンパイルできるように.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

(true)それは、もし私が文字列を渡した場合にのみ、ローカルのインスタンスを提供します。 – Cute

+0

うーん...あなたは正しい。マシン上に2つのインスタンス、1つのSQL 2000インスタンスが「MYMACHINE」、1つのSQL 2005インスタンスが「MYMACHINE¥MYSQL2005」となっています。私が "MYMACHINE"を渡すと、私はその1つのインスタンスを取得します。私は問題は、サーバー名またはインスタンス名のいずれかを渡すことができると思います。この場合、サーバー名もインスタンス名になります.EnumAvailableServersはインスタンス名のために通常行う処理そのインスタンスについての情報のみ。 Yuk。 –

+0

代わりに、booleanパラメータを受け取り、falseを渡すoverload(ローカルインスタンスだけでなく)を使用することもできます。これにより、ローカルでアクセス可能なすべてのインスタンスを持つ大きなテーブルが作成され、[Server]列でフィルタリングできます。おそらくそれはリストを構築するのに時間がかかりますので、理想的ではありません。しかし、それは動作します。 –

0

それを行うための1つの方法は、レジストリエントリを読むことです「」ソフトウェア\マイクロソフト\ Microsoft SQL Serverの\インスタンス名\ SQL \」は。あなたがあなたのソリューションでレジストリを読み取ることが許可されている?

1

組み込みの方法を使用してください。私はEnumAvailableSqlServersを使用し、私は、アプリケーションを実行することができ、リモートsqlDiscovery.meansのために行くことができonly.How私はローカルSQL発見を取得しています、それは、指定されたマシンのために行くと私の地元machine.ifに情報を取得する必要があることを利用し

System.Data.Sql.SqlDataSourceEnumerator 
関連する問題