我有一个隐藏不同ADO.NET提供者的差异,并有大量的代码就像一个dll:如何动态地处理对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时才有效,这自然是一个可怕的解决方案。这应该如何以正确的方式完成?
谢谢-matti
感谢您的回答。我必须在稍后检查。我称它为可怕的,因为将Oracle.DataAccess.dll复制到没有oracle的客户对我而言并不好。它也可能涉及一些法律问题? – 2013-03-13 07:05:15
我完全理解你的意思。但是,我也发现,近些年来,语义或“最佳实践”被放在编译和运行没有问题的代码之前。您可能会对授权有所了解,但我怀疑这是一个问题:“在大多数情况下,Oracle不会收取任何费用来分发Oracle客户端,也不会收取第三方应用程序的ODP.NET费用。但是,最好咨询许可协议,您从中获得Oracle软件的权利....“http://www.oracle.com/technetwork/database/windows/faq-093106.html#distribute – 2013-03-14 13:46:35
谢谢!我忘了这个答案,但这实际上有点像我上周做的事情(包装)。也许下意识:)我的解决方案是这样的,我把这个问题:http://stackoverflow.com/questions/21988358/what-does-a-using-statement-without-variable-do-when-disposing – 2014-02-25 09:10:49