获取SQL server组中可用服务器的列表

获取SQL server组中可用服务器的列表,sql,vb.net,Sql,Vb.net,如何提取SQL server组中可用SQL server的列表?我计划将该列表放在VB.NET的组合框中。我知道的唯一方法是使用命令行: osql -L 但我发现下面这篇文章似乎解决了您的特定目标,它填充了一个组合框: 在C#中,我使用了对odbc32.dll的调用 例如: [DllImport("odbc32.dll", CharSet = CharSet.Ansi)] private static extern short SQLBrowseConnect( IntPtr hconn,

如何提取SQL server组中可用SQL server的列表?我计划将该列表放在VB.NET的组合框中。

我知道的唯一方法是使用命令行:

osql -L
但我发现下面这篇文章似乎解决了您的特定目标,它填充了一个组合框:

在C#中,我使用了对odbc32.dll的调用

例如:

[DllImport("odbc32.dll", CharSet = CharSet.Ansi)]

private static extern short SQLBrowseConnect(
IntPtr hconn, StringBuilder inString,
short inStringLength, StringBuilder outString, short outStringLength, out short 
outLengthNeeded);

该函数的文档位于

上。如果您不想与SQL SMO绑定(SQL SMO就是它的用途),您可以执行类似操作来查找网络上的所有SQL Server:

Private Sub cmbServer_下拉列表(ByVal sender作为对象,ByVal e作为System.EventArgs)处理cmbServer.DropDown
作为Data.DataTable可调尺寸
Dim LST服务器作为列表(字符串)
尝试
如果cmbServer.Items.Count=0,则
System.Windows.Forms.Cursor.Current=System.Windows.Forms.Cursors.WaitCursor
oTable=System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources
对于oTable.Rows中的每个oRow作为数据行
如果oRow(“InstanceName”).ToString=“”,则
cmbServer.Items.Add(oRow(“ServerName”))
其他的
cmbServer.Items.Add(oRow(“ServerName”).ToString&“\”&oRow(“InstanceName”).ToString)
如果结束
下一个奥罗
如果结束
特例
ErrHandler(“frmLogin”、“cmbServer\u下拉列表”、例如源、例如消息、例如InnerException)
最后
System.Windows.Forms.Cursor.Current=System.Windows.Forms.Cursors.Default
如果可旋转不是什么,那么
oTable.Dispose()
如果结束
结束尝试
端接头
该类很好,因为它为您提供了2.0框架之外的SQL server发现