.netoracle-databaserefactoringodp.netsystem.data.oracleclient

Is there a way to force OracleCommand.BindByName to be true by default for ODP.NET?


Since the System.Data.OracleClient library has been deprecated, we are in the process of migrating our code base to use Oracle Data Provider for .NET (ODP.NET) instead. One of the issues that we have encountered is that the System.Data.OracleClient uses parameter name binding as opposed to binding by position and all of the code directly access the System.Data.OracleClient.OracleCommand as opposed to using an intermediate data layer.

Since there is quite a bit of code, is there an easy way to force the ODP.NET OracleCommand.BindByName to be true by default, or must we go through and set the value each time that it is used? Failing at that, is there an easy way to insert that line of code in Visual Studio 2008?


Solution

  • I know this thread is old, but I had the same problem today and thought I would share my solution in case someone else had this problem. Since OracleCommand is sealed (which sucks), I created a new class that encapsulates the OracleCommand, setting the BindByName to true on instantiation. Here's part of the implementation:

    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
    }
    

    Then all I had to do to cleanup the commands was do a search for OracleCommand and replace with DatabaseCommand and test.