none
讀取本機所安裝的SQL SERVER清單 RRS feed

  • 問題

  •  

    請問我在電腦內安裝了N個SQL SERVER

    例如:

    在電腦名稱為TEST安裝的SQL如下:

    TEST        ====>  SQL 2000

    TEST\SQL2005    ====> SQL 2005

    TEST\SQL2005EXPRESS   =====> SQL2005 EXPRESS

    請問我要如何知道這台電腦安裝了這個SQL SERVER呢(使用vb.net)?

    假如我Connection到其中一台有辦法用語法抓出上面所列出的資料庫清單嗎

     

     

     

    2006年11月28日 上午 09:37

解答

  • 使用 SQL Server Service Management Object (SMO) 的方法:
    (要記得引用 Microsoft.SqlServer.Smo.dll)

    http://msdn2.microsoft.com/en-us/library/ms210350.aspx

    example:

    DataTable enumSQLServers = Microsoft.SqlServer.Management.Smo.SmoApplication..EnumAvailableSqlServers();

    2006年11月28日 下午 01:11
    版主
  • Dear Sir,

    在我們測試的狀況下, 是的, 我們可以透過VB.NET 2005的方式來取得相關的資訊. 這部份在SQL Server 2005 SMO的範例程式中有提供相關的程式碼. 您可以參考下列的文件

     

    Readme_SqlService 

    http://msdn2.microsoft.com/en-us/library/ms160741.aspx

     

    This sample demonstrates techniques for requesting SQL Server services in database applications. By using SQL Server Management Object (SMO) capabilities of Microsoft SQL Server, this application lets users query the services of the selected server. This sample provides a user interface that permits specifying the SQL Server instance to connect to. The user can then request the services.

     

    Samples are provided for educational purposes only. They are not intended to be used in a production environment and have not been tested in a production environment. Microsoft does not provide technical support for these samples. Sample applications and assemblies should not be connected to or used with your production SQL Server database or your report server without the permission of the system administrator.

     

    在這個Sample, 會使用到另一個project (ServerConnect) 中的元件, 在此元件中, 就有提供如何取得當前的Instance list. 您可以自行查看相關的程式碼並加以修改. 下列程式碼為主要需要參考的部份:

     

        Private Sub GetServerList()

            Dim dt As DataTable

     

            ' Get list of SQL Servers

            dt = SmoApplication.EnumAvailableSqlServers(False)

     

            If (dt.Rows.Count > 0) Then

                ' Load server names into combo box

                For Each dr As DataRow In dt.Rows

                    ServerNamesComboBox.Items.Add(dr("Name"))

                Next

     

                ' Default to this machine

                ServerNamesComboBox.SelectedIndex _

                    = ServerNamesComboBox.FindStringExact( _

                    Environment.MachineName)

     

                ' If this machine is not a SQL server

                'then select the first server in the list

                If (ServerNamesComboBox.SelectedIndex < 0) Then

                    ServerNamesComboBox.SelectedIndex = 0

                End If

            Else

                Dim emb As New ExceptionMessageBox()

                emb.Text = My.Resources.NoSqlServers

                emb.Show(Me)

            End If

        End Sub

     

     

    Best regards,
    Colin Lin
    微軟技術支援中心

     

    2006年12月19日 上午 06:41

所有回覆

  • 列出資料庫清單語法:

    SELECT         CATALOG_NAME
    FROM             INFORMATION_SCHEMA.SCHEMATA

    2006年11月28日 上午 10:15
    版主
  • 謝謝你的回覆

    不好意思是我講錯了

    我要查詢的是安裝在本機的SQL Server清單

    而不是SQL Server內的資料庫清單

     

     

     

    2006年11月28日 上午 10:19
  • 使用 SQL Server Service Management Object (SMO) 的方法:
    (要記得引用 Microsoft.SqlServer.Smo.dll)

    http://msdn2.microsoft.com/en-us/library/ms210350.aspx

    example:

    DataTable enumSQLServers = Microsoft.SqlServer.Management.Smo.SmoApplication..EnumAvailableSqlServers();

    2006年11月28日 下午 01:11
    版主
  • 小朱你好

    謝謝你提供的方法

    我用vs2005可以取得整個區網內SQL SERVER清單

     

    請問一下VS2003有相同方法可以用嗎

     

     

    謝謝

    2006年11月29日 上午 01:36
  • Visual Studio 2003 則要用 SQL-DMO(SQL Server 2000 的,因為 SQL Server 2005 必須要有 .NET Framework 2.0),你可以自己找找 SQL Server 線上書籍看看 .

    不過,如果用 SQL Server 2000 的 SQL DMO,可能會找不到 SQL Server 2005....

    2006年11月29日 上午 02:10
    版主
  • 我試過使用SQL-DMO去抓取程式如下

        Dim objSQLApp As SQLDMO.Application
        Dim objNameList As SQLDMO.NameList
        Dim intCount As Integer

        objSQLApp = New SQLDMO.Application

        objNameList = objSQLApp.ListAvailableSQLServers

        TextBox1.Text = ""
        For intCount = 1 To objNameList.Count
          TextBox1.Text &= objNameList.Item(intCount) & vbCrLf

        Next

     

    但是每次抓出來的清單都不一樣而且一次只抓2-3個不會全抓

    還有SQL2005 EXPRESS也會抓出來

    還是我有什麼地方寫錯了呢

    2006年11月29日 上午 02:28
  • Dear Sir,

    在我們測試的狀況下, 是的, 我們可以透過VB.NET 2005的方式來取得相關的資訊. 這部份在SQL Server 2005 SMO的範例程式中有提供相關的程式碼. 您可以參考下列的文件

     

    Readme_SqlService 

    http://msdn2.microsoft.com/en-us/library/ms160741.aspx

     

    This sample demonstrates techniques for requesting SQL Server services in database applications. By using SQL Server Management Object (SMO) capabilities of Microsoft SQL Server, this application lets users query the services of the selected server. This sample provides a user interface that permits specifying the SQL Server instance to connect to. The user can then request the services.

     

    Samples are provided for educational purposes only. They are not intended to be used in a production environment and have not been tested in a production environment. Microsoft does not provide technical support for these samples. Sample applications and assemblies should not be connected to or used with your production SQL Server database or your report server without the permission of the system administrator.

     

    在這個Sample, 會使用到另一個project (ServerConnect) 中的元件, 在此元件中, 就有提供如何取得當前的Instance list. 您可以自行查看相關的程式碼並加以修改. 下列程式碼為主要需要參考的部份:

     

        Private Sub GetServerList()

            Dim dt As DataTable

     

            ' Get list of SQL Servers

            dt = SmoApplication.EnumAvailableSqlServers(False)

     

            If (dt.Rows.Count > 0) Then

                ' Load server names into combo box

                For Each dr As DataRow In dt.Rows

                    ServerNamesComboBox.Items.Add(dr("Name"))

                Next

     

                ' Default to this machine

                ServerNamesComboBox.SelectedIndex _

                    = ServerNamesComboBox.FindStringExact( _

                    Environment.MachineName)

     

                ' If this machine is not a SQL server

                'then select the first server in the list

                If (ServerNamesComboBox.SelectedIndex < 0) Then

                    ServerNamesComboBox.SelectedIndex = 0

                End If

            Else

                Dim emb As New ExceptionMessageBox()

                emb.Text = My.Resources.NoSqlServers

                emb.Show(Me)

            End If

        End Sub

     

     

    Best regards,
    Colin Lin
    微軟技術支援中心

     

    2006年12月19日 上午 06:41