nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Visual Studio and Development Technologies。

App.configの接続文字列情報から実装クラスを指定せずにをDbConnectionを生成する方法

データベースへのコネクションを生成する場合、次のような実装はソースに接続対象のDBへの依存を持ち込んでしまいます。

using(var connection = new SqlConnection(...))

App.configの接続情報を利用して、それを回避することができます。自分でもしょっちゅう忘れてしまうのでここにメモしておきます。

App.Configにつぎのように接続文字列を指定した場合

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="AdventureWorks2017"
         connectionString="Data Source=localhost;Initial Catalog=AdventureWorks2017;Integrated Security=True;"
         providerName="System.Data.SqlClient"/>
  </connectionStrings>

次のようなコードを記載することでDbConnectionのインスタンスを生成できます。

var settings = ConfigurationManager.ConnectionStrings["AdventureWorks2017"];
var factory = DbProviderFactories.GetFactory(settings.ProviderName);
using (var connection = factory.CreateConnection())
{
    connection.ConnectionString = settings.ConnectionString;
    connection.Open();

DbProviderFactoriesから取得したDbProviderFactoryを利用することで、コードから接続するDB製品への依存なくDbConnectionのインスタンスを生成できます。

以上です。