在C#中跨数据库查询以获取数据库名称列表

时间:2015-04-07 16:23:55

标签: c# database entity-framework-6 database-agnostic

我正在使用带有C#的Entity Framework 6(EF6)。我试图编写一个DB不可知查询来获取所有数据库名称列表。

例如:

与SQL Server存在类似

的内容
select * from master.sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

使用MySQL

SHOW DATABASES
与Postgres,Oracle等

等等。

所以问题是EF6是否提供了一种通过特定数据库独立获取此列表的方法。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

public bool TestConnection(string connString, List<string> databases) {
  using (context = new DatabaseContext(connString)) {
    if (!context.Database.Exists())
      return false;

    string query = "select * from master.sys.databases WHERE name NOT IN('master', 'tempdb', 'model', 'msdb')";
    var connection = context.Database.Connection;

    DataTable dt_databases = new DataTable();
    SqlDataAdapter dataAdapter = new SqlDataAdapter(query, connection.ConnectionString);
    dataAdapter.Fill(dt_databases);

    // Getting name from each dataRow
    foreach (DataRow dr in dt_databases.Rows)
      databases.Add(dr.ItemArray[0].ToString());

    return true;
  }

}

如果您只想要数据库的名称,可以像这样构建查询:

string query = "select name from master.sys.databases WHERE name NOT IN('master', 'tempdb', 'model', 'msdb')";