1

I'm using Entity Framework 6 (EF6) with C#. I'm trying to write a DB agnostic query to get all the databases names list.

For example:

with SQL Server exists something like

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

with MySQL

SHOW DATABASES

and so on with Postgres, Oracle, etc.

So the question is if EF6 offers a way to get this list independently by the specific database.

1 Answers1

1

You can do this :

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;
  }

}

if you just want the name of databases, you can build your query like this:

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