Существуют ли какие-либо классы (или методы), которые могут создавать отформатированную строку подключения с указанием имени поставщика и идентификатора пользователя, пароля и т.д.?

#.net #ado.net #connection-string

Вопрос:

Напр..

 ConnectionDetails cd = new ConnectionDetails ();
cd.ProviderName = "System.Data.OleDb";
cd.DataSource = "serverAddress";
cd.Catalog = "database";
cd.UserId = "userId";
cd.Password = "password";

string connectionString = cs.CreateConnectionString();
// Should return:
// "Provider=SQLOLEDB;Data Source=serverAddress;Initial Catalog=database;User Id=userId;Password=password;"
 

Я бы написал свой собственный класс, но я не уверен, как получить свойство поставщика строки подключения (SQLOLEDB в этом примере) программно из инвариантного имени поставщика бд (System.Data.OleDb).

Редактировать:

Вы можете сделать

 DbProviderFactories.GetFactory("System.Data.OleDB").CreateConnectionStringBuilder()
 

Но возвращаемый DBConnectionStringBuilder все еще не знает, что это свойство поставщика строки подключения, даже если в этом случае производный класс имеет свойство «Поставщик».

Комментарии:

1. Спасибо за указатель на DbProviderFactories. GetFactory-это то, что я искал.

Ответ №1:

Самое близкое, что я знаю, — это DbConnectionStringBuilder.

Поскольку свойства, требуемые разными поставщиками, различаются, он использует ассоциативный массив (коллекцию значений имени), а не фиксированные свойства.

Таким образом, ваш пример будет выглядеть так

 DbConnectionStringBuilder csb = new DbConnectionStringBuilder();
csb["ProviderName"] = "System.Data.OleDb";
csb["DataSource"] = "serverAddress";
csb["Catalog"] = "database";
csb["UserId"] = "userId";
csb["Password"] = "password";

string connectionString = csb.ConnectionString;
 

Комментарии:

1. Это не работает. В строке подключения OleDB свойством поставщика является «Поставщик=SQLOLEDB». Это, по сути, моя проблема. Мне нужно знать, как получить свойство поставщика строки подключения из имени инвариантного поставщика.

Ответ №2:

Существует класс OleDbConnectionStringBuilder, который создаст для вас строку подключения.

Но это звучит так, как будто вы пытаетесь заставить его генерировать имя поставщика для вас, и я не думаю, что это действительно работает таким образом. Поскольку имя поставщика может варьироваться, это то, что вам придется указать, чтобы указать соединению, что делать. Какой бы механизм вы ни использовали для выбора подключения к базе данных (или для управления заводскими методами подключения к базе данных, если вы идете по этому маршруту), он также должен будет указать имя поставщика.