【发布时间】:2015-08-30 08:19:43
【问题描述】:
我有一个带有大约 100 个 TableAdapter (DataSet xsd) 的旧 DAL,但是因为我们使用 Oracle 客户端 12c 获得了新服务器,所以我不得不从旧的不推荐使用的 System.Data.OracleClient 切换到 Oracle.DataAccess.Client (ODP.NET)。
我现在唯一的问题是我在调用表适配器时总是得到一个错误:ORA-01008: Not all variables bound。
我读到我必须为每个 TableAdapter 在OracleCommand 中将BindByName 设置为true。但是,当唯一使用 OracleCommand 的地方是 TableAdapter 本身的设计器时,我该怎么做呢?
有没有办法在不扩展每个 TableAdapter 的情况下做到这一点,因为我有 100 个。
【问题讨论】:
-
所以,你说,这是设计师。这意味着在您的每个表单或控件上都有一个?使用一些数据访问层怎么样?
-
正如我所说,这是一个遗留代码库,一开始设计得不是很好。有一个带有 TableAdapter 的 DAL,然后有一个带有 WCF 服务的 BLL,它返回这些 TableAdapter,所以所有的 TableAdapter 一直到 UI。但现在这不是问题,因为我们正试图一步一步地向前迈进,而这一次是从弃用的
System.Data.OracleClient切换到新的Oracle.DataAccess.Client。但是这个BindByName很难,因为我们有大约 100 个 TableAdapter。 -
您能否发布一些代码 sn-ps 以及产生该错误的确切代码?问题可能不在您认为的位置。我记得 System.Data.OracleClient 在管理绑定变量方面非常出色,尽管我不记得语法是否与主流 ODP 语法有什么不同。
-
据我所知,
BindByName是命令的属性,而不是适配器。因此,您可以像以前一样继续传递您的适配器。您在数据访问中需要做的就是用返回命令的方法替换每个命令,并且在此方法中,只需对所有代码库“bindbyname”执行一次 -
@T.S. OracleCommand 硬连线到每个 TableAdapter 设计器中。这会产生问题。
标签: c# oracle odp.net tableadapter system.data.oracleclient