次の方法で共有


SQL Server のインスタンスの列挙 (ADO.NET)

更新 : November 2007

SQL Server 2000 でも SQL Server 2005 でも、アプリケーションは現在のネットワーク内の SQL Server インスタンスを検索できます。SqlDataSourceEnumerator クラスは、表示可能なすべてのサーバーに関する情報が含まれた DataTable を提供することで、アプリケーション開発者にこの情報を公開します。このときに返されるテーブルには、ユーザーが新しい接続を作成しようとして、[接続プロパティ] ダイアログ ボックスで、利用可能なすべてのサーバーが含まれたドロップダウン リストを展開したときに表示されるリストと一致するサーバー インスタンスのリストが含まれています。結果には一部のインスタンスが表示されないことがあります。

a6t1z9x2.alert_note(ja-jp,VS.90).gifメモ :

大半の Windows サービスと同様に、できるだけ少ない特権で SQL Browser サービスを実行することをお勧めします。SQL Browser サービスの詳細および SQL Browser サービスの動作を管理する方法については、SQL Server オンライン ブックを参照してください。

列挙子インスタンスの取得

使用可能な SQL Server インスタンスに関する情報が含まれたテーブルを取得するには、まず、共有プロパティまたは静的プロパティである Instance プロパティを使用して列挙子を取得する必要があります。

Dim instance As System.Data.Sql.SqlDatSourceEnumerator = _
   System.Data.Sql.SqlDataSourceEnumerator.Instance
System.Data.Sql.SqlDataSourceEnumerator instance = 
   System.Data.Sql.SqlDataSourceEnumerator.Instance

静的なインスタンスを取得したら、使用可能なサーバーに関する情報が含まれた DataTable を返す GetDataSources メソッドを呼び出すことができます。

Dim dataTable As System.Data.DataTable = instance.GetDataSources()
System.Data.DataTable dataTable = instance.GetDataSources();

このメソッド呼び出しから返されるテーブルには、次の列が含まれています。これらすべての列に string 値が含まれています。

説明

ServerName

サーバーの名前。

InstanceName

サーバー インスタンスの名前。サーバーが既定のインスタンスとして実行されている場合は空白になります。

IsClustered

サーバーがクラスタの一部になっているかどうかを示します。

Version

サーバーのバージョン (SQL Server 2000 の場合は 8.00.x、SQL Server 2005 の場合は 9.00.x)。

列挙の制約

使用可能なサーバーの一部が表示されないことがあります。サーバーの一覧は、タイムアウトやネットワーク トラフィックなどの要因によって異なることがあります。そのため、2 回続けて呼び出しても、呼び出しごとにリストが異なる可能性があります。同じネットワーク上のサーバーのみがリストに表示されます。通常、ブロードキャスト パケットはルーターを経由しません。そのため、特定のサーバーがリストに表示されないことがありますが、その状態はいつ呼び出しを行っても変わりません。

一覧に含まれているサーバーは、IsClustered やバージョンなどの追加情報を持っている場合も、持っていない場合もあります。サーバーが持っている情報は、一覧が取得された方法によって異なります。SQL Server ブラウザ サービスを介して一覧表示されるサーバーには、名前しか一覧表示しない Windows インフラストラクチャを介して検索されたサーバーより多くの詳細情報が含まれています。

a6t1z9x2.alert_note(ja-jp,VS.90).gifメモ :

サーバー列挙は、完全に信頼された環境で実行している場合にのみ利用できます。部分的に信頼された環境で実行されているアセンブリは、SqlClientPermission Code Access Security (CAS) アクセス許可を持っている場合でも、サーバー列挙を使用できません。

SQL Server 2000 は、SqlDataSourceEnumerator の情報を内部で提供します。しかし、SQL Server 2005 は、SQL Browser という名前の外部の Windows サービスを利用して、この情報を提供します。このサービスは既定で有効になりますが、管理者がこのサービスをオフにしたり無効にしたりすると、サーバー インスタンスがこのクラスから見えなくなります。このサービスは、SQL Server 2005 のみで使用され、SQL Server 2000 の動作には影響を及ぼしません。

a6t1z9x2.alert_note(ja-jp,VS.90).gifメモ :

ハードウェアまたはソフトウェアによって、SQL Server インスタンスを参照する機能が制約されることがあります。参照用のポートを開く方法の詳細については、サポート技術情報の文書「Windows XP Service Pack 2 を実行するコンピュータで SQL Server を使用できるようにポートを開く方法」を参照してください。

次のコンソール アプリケーションは、表示可能なすべての SQL Server インスタンスに関する情報を取得し、コンソール ウィンドウにその情報を表示します。

Imports System.Data.Sql

Module Module1
  Sub Main()
    ' Retrieve the enumerator instance and then the data.
    Dim instance As SqlDataSourceEnumerator = _
     SqlDataSourceEnumerator.Instance
    Dim table As System.Data.DataTable = instance.GetDataSources()

    ' Display the contents of the table.
    DisplayData(table)

    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
  End Sub

  Private Sub DisplayData(ByVal table As DataTable)
    For Each row As DataRow In table.Rows
      For Each col As DataColumn In table.Columns
        Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
      Next
      Console.WriteLine("============================")
    Next
  End Sub
End Module
using System.Data.Sql;

class Program
{
  static void Main()
  {
    // Retrieve the enumerator instance and then the data.
    SqlDataSourceEnumerator instance =
      SqlDataSourceEnumerator.Instance;
    System.Data.DataTable table = instance.GetDataSources();

    // Display the contents of the table.
    DisplayData(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
  }

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

参照

その他の技術情報

SQL Server と ADO.NET