Подтвердить что ты не робот

С# подключиться к базе данных и перечислить базы данных

Возможный дубликат:
Запрос SQL Server для поиска всех существующих имен базы данных

Я пытаюсь выяснить, как перечислить базы данных после подключения к серверам, не указав сначала базу данных.

sqlConnection1 = new SqlConnection("Server=" + sqlServer + ";Database=" + database +    
";User ID=" + userName + ";Password=" + password + ";Trusted_Connection=False;");

Итак, в основном я хочу, чтобы конечный пользователь подключался к серверу sql, а затем выпадающий список, заполненный списком db, который они могут подключать и запрашивать.

Идеи?

4b9b3361

Ответ 1

Вы можете использовать SqlConnection.GetSchema:

using(var con = new SqlConnection("Data Source=Yourserver; Integrated Security=True;"))
{
    con.Open();
    DataTable databases = con.GetSchema("Databases");
    foreach (DataRow database in databases.Rows)
    {
        String databaseName = database.Field<String>("database_name");
        short dbID = database.Field<short>("dbid");
        DateTime creationDate = database.Field<DateTime>("create_date");
    }
} 

Коллекции схем SQL Server (ADO.NET)

Чтобы определить список поддерживаемых коллекций схем, вызовите Метод GetSchema без аргументов или с именем коллекции схемы "MetaDataCollections". Это вернет DataTable со списком поддерживаемые коллекции схем, количество ограничений, которые они каждой поддержки и количества частей идентификатора, которые они используют.

Ответ 2

Вы можете записать сохраненный процесс, который может вернуть вам список баз данных на этом сервере.

SELECT name
FROM master.sys.databases

или

EXEC sp_databases

Ответ 3

Это должно содержать имена базы данных:

var connectionString = string.Format("Data Source=localhost;User ID={0};Password={1};", userName, password);

DataTable databases = null;
using (var sqlConnection = new SqlConnection(connectionString))
{
    sqlConnection.Open();
    databases = sqlConnection.GetSchema("Databases");
    sqlConnection.Close();
}

if (databases != null)
{
    foreach (DataRow row in databases.Rows)
    {
        foreach (var item in row.ItemArray)
        {
            Console.Write("{0} ", item);
        }
        Console.WriteLine();
    }
}

Не стесняйтесь исключать всю печать в конце. Бросьте все это в консольном приложении, чтобы увидеть его в действии. Имена таблиц указаны в индексе 0 row.ItemArray.

Ответ 5

Самый последний список баз данных будет в самой базе данных. Почему бы не подключиться к tempdb в качестве базы данных по умолчанию (так как вам нужно подключиться к чему-либо), чтобы начать с него, а затем запросить из master.sys.databases.

select [name] from master.sys.databases

Затем вы можете обновить строку подключения любой необходимой базой данных или просто изменить db с помощью метода ChangeDatabase().

например. connection.ChangeDatabase(selectedDB);

Вы также можете подключиться к master, но мне нравится поддерживать соединения по умолчанию в tempdb, так как иногда люди забывают менять базы данных перед созданием объектов. Я предпочел бы, чтобы хлам попал в tempdb, чем master, поскольку tempdb воссоздается при перезагрузке SQL.

Ответ 6

Вы можете попробовать с помощью

select * from master.sys.databases