1

我正在使用带有 C# 的实体框架 6 (EF6)。我正在尝试编写一个与数据库无关的查询来获取所有数据库名称列表。

例如:

与 SQL Server 存在类似的东西

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

与 MySQL

SHOW DATABASES

等等 Postgres、Oracle 等。

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

4

1 回答 1

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')";
于 2016-08-19T14:12:03.793 回答