さまざまな ADO.NET プロバイダーの違いを隠し、次のような多くのコードを持つ dll があります。
private static void AppendProviderSpecificParameterCmdStr(StringBuilder sb, DbCommand cmd, string fieldNameToUse, ComparisonOperator oprtr, string parameterName)
{
if (cmd is System.Data.OracleClient.OracleCommand || cmd is Oracle.DataAccess.Client.OracleCommand)
{
sb.AppendFormat("{0}{1}:{2}", fieldNameToUse, GetComparisonOperatorStr(oprtr, cmd), parameterName);
}
else if (cmd is SqlCommand)
{
sb.AppendFormat("{0}{1}@{2}", fieldNameToUse, GetComparisonOperatorStr(oprtr, cmd), parameterName);
}
else if (cmd is OleDbCommand)
{
sb.AppendFormat("{0}{1}?", fieldNameToUse, GetComparisonOperatorStr(oprtr, cmd));
}
else
{
throw new Exception(string.Format("Wrong database command type: {0},", cmd.GetType()));
}
}
ここで、比較演算子は自分の列挙型です。
Oracle.DataAccess は、Oracle クライアントを備えたすべてのマシンに存在し、このコードは私のニーズには問題ありません。しかし今、私は SqlClient しかなく、Oracle をまったく必要としない状況に直面しました。したがって、私のコードは、当然恐ろしいソリューションである Oracle.DataAccess.dll をコピーした場合にのみ機能します。これはどのように正しい方法で行うべきですか?
ありがとう - マティ