.NET 4.5 で提供された「正しい」方法を利用したい関数があります。
public DbDataAdapater CreateDataAdapter(DbConnection connection)
{
#IFDEF (NET45)
return DbProviderFactories.GetFactory(connection).CreateDataAdapter();
#ELSE
//We can't construct an adapter directly
//So let's run around the block 3 times, before potentially crashing
DbDataAdapter adapter;
if (connection is System.Data.SqlClient.SqlConnection)
return new System.Data.SqlClient.SqlDataAdapter();
if (connection is System.Data.OleDb.OleDbConnection)
return new System.Data.OleDb.OleDbDataAdapter();
if (connection is System.Data.Odbc.OdbcConnection)
return new System.Data.Odbc.OdbcDataAdapter();
//Add more DbConnection kinds as they become invented
if (connection is SqlCeConnection)
return new SqlCeDataAdapter();
if (connection is MySqlConnection)
return new MySqlDataAdapter();
if (connection is DB2Connection)
return new DB2DataAdapter();
throw new Exception("[CreateDataAdapter] Unknown DbConnection type: " + connection.GetType().FullName);
#END
}
これを機能させるために私が見つけた唯一の方法は、この共有コードを使用して Visual Studio ソリューションを変更するすべての人のためのものです。
これは起こらないでしょう。機能する必要があります。そうしないと、まったく使用されません。
ソリューションが以前のバージョンの .NET Framework を対象としている場合、機能しないコードを定義する方法はありますか?
言い換えれば、これがコンパイルされた場合、それは素晴らしいことです:
public DbDataAdapter CreateDataAdapter(DbConnection conn)
{
if (System.Runtime.Version >= 45)
return DbProviderFactories.GetFactor(connection).CreateDataAdapter();
else
{
//...snip the hack...
}
}
ただし、対象のフレームワークが低すぎるとコンパイルされません。