С# подключиться к базе данных и перечислить базы данных
Возможный дубликат:
Запрос SQL Server для поиска всех существующих имен базы данных
Я пытаюсь выяснить, как перечислить базы данных после подключения к серверам, не указав сначала базу данных.
sqlConnection1 = new SqlConnection("Server=" + sqlServer + ";Database=" + database +
";User ID=" + userName + ";Password=" + password + ";Trusted_Connection=False;");
Итак, в основном я хочу, чтобы конечный пользователь подключался к серверу sql, а затем выпадающий список, заполненный списком db, который они могут подключать и запрашивать.
Идеи?
Ответы
Ответ 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
.
Ответ 4
Вы можете использовать SMO - Объекты управления SQL Server.
Это два примера кода в проекте кода:
Аутентификация SQL Server с использованием SMO
Базы данных, использующие SMO
Ответ 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