由于System.Data.OracleClient库已经是deprecated,因此我们正在迁移代码库以使用Oracle Data Provider for .NET(ODP.NET)。我们遇到的问题之一是System.Data.OracleClient使用参数名称绑定而不是按位置绑定,并且所有代码直接访问System.Data.OracleClient.OracleCommand而不是使用中间数据层。

由于有很多代码,是否有一种简单的方法可以强制将ODP.NET OracleCommand.BindByName默认设置为true,还是必须在每次使用该值时进行设置?失败了,是否有一种简单的方法可以在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并进行测试。

08-17 03:49