我有一个隐藏不同 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 时才有效,这自然是一个可怕的解决方案。这应该如何以正确的方式完成?
谢谢-马蒂