Перекрестный запрос к базе данных в 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')";