Replacing TableAdapters with Oracle.DataAccess.Client (ODP.N



我有一个像100 TableAdapters (DataSet xsd)的旧DAL,但是因为我们有了Oracle客户端12c的新服务器,我不得不从旧的已弃用的System.Data.OracleClient切换到Oracle.DataAccess.Client (ODP.NET)。

我现在唯一的问题是,我总是得到一个错误:ORA-01008:不是所有的变量绑定时调用表适配器。

我读到我必须为每个TableAdapter在OracleCommand中将BindByName设置为true。但是,我怎么能做到这一点,当唯一的地方使用OracleCommand是在TableAdapter本身的设计器?

有没有办法在不扩展每个TableAdapter的情况下做到这一点,因为我有大约100个TableAdapter

我所做的是扩展每个TableAdapter并创建一个新的SetBindByName()方法,其中我在oracleccommand集合上强制BindByName = true

一样……

public partial class V_CUSTOMER_GLOBALTableAdapter
{
    public void SetBindByName(bool value = true)
    {
        foreach (Oracle.DataAccess.Client.OracleCommand cmd in this.CommandCollection)
        {
            cmd.BindByName = value;
        }
    }
}

然后,当我创建TableAdapter的实例时,我调用了新的SetBindByName()方法。

V_CUSTOMER_GLOBALTableAdapter ta = new V_CUSTOMER_GLOBALTableAdapter();
ta.SetBindByName(true);

最新更新