Как определить провайдера по указанной пользователем строке подключения? - PullRequest
1 голос
/ 16 декабря 2009

Моему приложению необходимо выполнить определенный запрос к указанной пользователем строке подключения. Для запроса потребуются некоторые параметры, поэтому я подумывал об использовании DbProviderFactory в сочетании с myConnection.GetSchema("DataSourceInformation").Rows[0]["ParameterMarkerFormat"], чтобы узнать, нужно ли мне использовать : (Oracle), @ (Sql) или ? (OleDb) отправить параметры в базу данных.

Чтобы использовать DbProviderFactory, мне нужно выяснить, какой поставщик необходим для строки подключения. Есть ли хороший способ сделать это, или мне нужно использовать какую-то if(conStr.indexOf("oledb") != -1) { type = DbTypes.OleDB; } логику? (Или есть лучший способ подключения к «неизвестному» типу базы данных?)

Примечание: DbProviderFactory ожидает, что провайдер будет в форме System.Data.SqlClient, а не SQLNCLI.1, который находится в фактической строке соединения.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Дело в том, что строка подключения имеет значение только в контексте провайдера, а не наоборот. Другими словами, не существует стандарта для идентификации провайдера на основе строки. Тем не менее, вы можете, как правило, выводить провайдера из строки, как вы продемонстрировали, используя IndexOf.

Вы можете получить список установленных провайдеров, используя статический метод DbProviderFactories.GetFactoryClasses (). Это вернет DataTable со строкой для каждого провайдера. В строке будет столбец «InvariantName», который даст правильное значение для передачи в DbProviderFactories.GetFactory. Если позволяет дизайн вашего приложения, вы можете открыть список доступных провайдеров одновременно с получением строки соединения, чтобы ваши пользователи могли указать, какого провайдера они намереваются установить соединение. Столбец «Имя» предназначен именно для этой цели.

0 голосов
/ 16 декабря 2009

Вам необходимо указать это в файле app.config. От MSDN,

<configuration>
  <connectionStrings>
    <clear/>
    <add name="NorthwindSQL" 
     providerName="System.Data.SqlClient" 
     connectionString=
     "Data Source=MSSQL1;Initial Catalog=Northwind;Integrated Security=true"
    />

    <add name="NorthwindAccess" 
     providerName="System.Data.OleDb" 
     connectionString=
     "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Northwind.mdb;"
    />
  </connectionStrings>
</configuration>
...