Dot-Net

對於 ODP.NET,有沒有辦法強制 OracleCommand.BindByName 預設為真?

  • August 26, 2019

由於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 文件中。

也許它可以提供幫助。

引用自:https://stackoverflow.com/questions/2177733