Перекрестный запрос к базе данных в C# для получения списка имен баз данных

Я использую Entity Framework 6 (EF6) с C#. Я пытаюсь написать независимый от БД запрос, чтобы получить список всех имен баз данных.

Например:

с SQL Server существует что-то вроде

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

с MySQL

SHOW DATABASES

и так далее с Postgres, Oracle и т. д.

Поэтому вопрос в том, предлагает ли EF6 способ получить этот список независимо от конкретной базы данных.

1 ответ

Решение

Вы можете сделать это:

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')";
Другие вопросы по тегам