Dot-Net
對於 ODP.NET,有沒有辦法強制 OracleCommand.BindByName 預設為真?
由於System.Data.OracleClient庫已被棄用,我們正在遷移我們的程式碼庫以改用Oracle Data Provider for .NET (ODP.NET)。我們遇到的問題之一是 System.Data.OracleClient 使用參數名稱綁定而不是按位置綁定,並且所有程式碼都直接訪問System.Data.OracleClient.OracleCommand而不是使用中間數據層。
由於有相當多的程式碼,是否有一種簡單的方法可以強制 ODP.NET OracleCommand.BindByName 預設為真,或者我們必須在每次使用它時都設置該值?失敗了,有沒有一種簡單的方法可以在 Visual Studio 2008 中插入那行程式碼?
我知道這個執行緒很舊,但我今天遇到了同樣的問題,我想我會分享我的解決方案,以防其他人遇到這個問題。由於 OracleCommand 是密封的(很糟糕),我創建了一個封裝 OracleCommand 的新類,在實例化時將 BindByName 設置為 true。這是實現的一部分:
public class DatabaseCommand { private OracleCommand _command = null; public DatabaseCommand(string sql, OracleConnection connection) { _command = new OracleCommand(sql, connection) { BindByName = true }; } public int ExecuteNonQuery() { return _command.ExecuteNonQuery(); } // Rest of impl removed for brevity }然後,我需要做的就是清理命令,搜尋 OracleCommand 並替換為 DatabaseCommand 並進行測試。
我沒試過,但是,
我見過類似的東西
"
cmd.GetType().GetProperty("BindByName").SetValue(cmd,true,null);" 在 PetaPoco.cs 文件中。也許它可以提供幫助。