繁体   English   中英

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

[英]Cross database query in C# to get Databases names list

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

例如:

与SQL Server存在类似

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

与MySQL

SHOW DATABASES

以及Postgres,Oracle等

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

你可以这样做 :

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')";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM