枚举所有正在运行的数据库

时间:2009-10-20 12:38:19

标签: c# sql-server vb.net

我正在编写一个小型数据库管理程序。 如果你给db,它可以正常工作,但是当你不知道安装了哪个数据库时就行了。

如何枚举所有正在运行的数据库?

e.g。该计划的输出:

Port xy MS-SQL Server 2005
Port ab Postgre SQL Server 
Port cd MySQL Server
Port ef MS-SQL 2008 Express Server
Port gh Oracle Server

4 个答案:

答案 0 :(得分:4)

对于枚举sql server实例(我认为你的意思)你可以找到各种关于如何执行此操作的示例,这些示例依赖于Sql Server Browser服务,另一种方法是使用SQLDMO。

来自MSDN

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("============================");
    }
  }
}

如果您正在寻找更多,那么能够检测到mysql / oracle等。通过网络,一个更通用的工具,如nmap可能更合适。

答案 1 :(得分:2)

您需要查询所有已知的数据库端口,以确定是否有实例正在运行。如果数据库在非标准端口上运行,您可能无法找到它。

答案 2 :(得分:0)

对于SQL Server,您只需执行一个过程

即可
exec SP_HelpDB

请注意,这只会列出您有权访问的服务器上的所有数据库。

如果您想要所有数据库而不管您的访问权限,可以执行以下操作:

SELECT NAME FROM master..sysdatabases

答案 3 :(得分:0)

这是对前一张海报答案的重新哈希,但在VB中。

您希望使用System.Data.Sql类的Sql.SqlDataSourceEnumerator.Instance.GetDataSources方法。

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

我有一个使用它的数据库配置对话框。像冠军一样工作。