我有一個隱藏不同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