2008-09-29 111 views

回答

5

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

osql -L 

但我发现下面的文章,这似乎解决您的具体目标填充组合框:

http://www.sqldbatips.com/showarticle.asp?ID=45

+1

该文章似乎不再工作:( – mrc 2016-05-09 08:48:33

0

在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); 

文档该功能是MSDN

5

如果你不想被捆绑到SQL SMO,这是Ben的文章使用,你可以做这样的事情,以发现网络上的所有SQL服务器:

Private Sub cmbServer_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbServer.DropDown 
    Dim oTable As Data.DataTable 
    Dim lstServers As List(Of String) 
    Try 
     If cmbServer.Items.Count = 0 Then 
      System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor 
      oTable = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources 

      For Each oRow As DataRow In oTable.Rows 
       If oRow("InstanceName").ToString = "" Then 
        cmbServer.Items.Add(oRow("ServerName")) 
       Else 
        cmbServer.Items.Add(oRow("ServerName").ToString & "\" & oRow("InstanceName").ToString) 
       End If 
      Next oRow 
     End If 
    Catch ex As Exception 
     ErrHandler("frmLogin", "cmbServer_DropDown", ex.Source, ex.Message, Ex.InnerException) 
    Finally 
     System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default 

     If oTable IsNot Nothing Then 
      oTable.Dispose() 
     End If 
    End Try 
End Sub 

的SqlDataSourceEnumerator类是不错的,因为它可以让你的SQL服务器发现右出的2.0框架。