Search code examples
c#databaseentity-framework-6database-agnostic

Cross database query in C# to get Databases names list


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.


Solution

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