人気ブログランキング | 話題のタグを見る
(.Net)ネットーワーク上のSQL Server インスタンスの一覧取得

クライアントソフト初回起動時に、DBの接続先を設定させる要件で、今までは直に SQL Server のホスト名を指定させてましたが、ユーザビリティを向上させるために、自動的にLAN内の SQL Server を検索する機能を付けてみました。
(SQL Server Management Studio のログインで参照を押した時のような感じです。)

結構ややこしいだろなと思って探すと、あっさり見つかりました。
MSDN:SQL Server のインスタンスの列挙に詳しく取り上げられています。

下記は、ネットワーク上の SQL Server インスタンスを検索し、ListViewコントロールに表示するメソッドです。
''' <summary>
''' ネットワーク上のSQL Server インスタンスを検索し、結果をListViewに表示
''' </summary>
''' <remarks></remarks>
Private Sub SetDatabaseServerListView(ByRef lsvServer As ListView)
'リストビューからいったん情報クリア
lsvServer.Items.Clear()
 
'ネットワーク上の SQL Server Instance取得
Dim instance As SqlDataSourceEnumerator = SqlDataSourceEnumerator.Instance
Dim dtbl As DataTable = instance.GetDataSources()
 
For Each row As DataRow In dtbl.Rows
'ListViewに情報追加
Dim svItems() As String = {row("ServerName"), row("InstanceName"), row("Version")}
Dim listViewItem As New ListViewItem(svItems, 0)
listViewItem.SubItems(0).Name = "SvName"
listViewItem.SubItems(1).Name = "InstanceName"
lsvServer.Items.Add(listViewItem)
Next
End Sub


あまりに簡単にできたので、ちょっと拍子抜け。。

追記(2009/7/6):
row("ServerName"), row("InstanceName"), row("Version") ですが、どうやら値が DBNull になる場合もあるようです。(MSDNには書いてませんが。。。)
なので、

If row("ServerName") Is DBNull.Value OrElse row("InstanceName") Is DBNull.Value OrElse row("Version") Is DBNull.Value OrElse Then
Continue For
End If
Dim svItems() As String = {row("ServerName"), row("InstanceName"), row("Version")}

としたほうが良さそうです。
by jehoshaphat | 2009-06-28 23:21 | .Net開発


<< XOOPS Cube をインス... 外部メディアのオートランで特定... >>