用Oracle.DataAccess.Client(ODP.NET)替换TableAdapter

时间:2014-07-18 20:09:00

标签: c# oracle odp.net tableadapter system.data.oracleclient

我有一个带有100个TableAdapters(DataSet xsd)的遗留DAL,但由于我们使用Oracle客户端12c获得了新服务器,因此我不得不从旧的已弃用的Oracle.DataAccess.Client(ODP.NET)切换到System.Data.OracleClient(ODP.NET)。 1}}。

我现在唯一的问题是我总是收到错误: ORA-01008:调用表适配器时并非所有变量绑定

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

有没有办法在没有扩展每个TableAdapter的情况下执行此操作,因为我喜欢其中的100个。

1 个答案:

答案 0 :(得分:0)

我做的是扩展了每个TableAdapter并创建了一个新的SetBindByName()方法,我在OracleCommand集合上强制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);