由于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并进行测试。