У меня есть унаследованный DAL с 100 TableAdapters (DataSet xsd), но поскольку мы получили новые серверы с клиентом Oracle 12c, мне пришлось сделать переход к Oracle.DataAccess.Client
(ODP.NET) из старого устаревшего System.Data.OracleClient
,
Единственная проблема, с которой я сталкиваюсь сейчас, это то, что я всегда получаю сообщение об ошибке: ORA-01008: Не все переменные связаны при вызове табличных адаптеров.
Я прочитал, что мне нужно установить BindByName
в true
в OracleCommand
для каждого TableAdapter. Но как я могу это сделать, когда единственное место, где используется OracleCommand
находится в дизайнере самого TableAdapter?
Есть ли способ сделать это без расширения каждого TableAdapter, потому что у меня есть 100 из них.
Что я сделал, я расширил каждый TableAdapter и создал новый SetBindByName()
, где я принудительно BindByName = true
в коллекции OracleCommand.
Вот так...
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);
System.Data.OracleClient
на новыйOracle.DataAccess.Client
. Но этоBindByName
затрудняет, потому что у нас есть около 100 TableAdapter.