Замена адаптеров таблиц на Oracle.DataAccess.Client (ODP.NET)

1

У меня есть унаследованный 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 из них.

  • 0
    Итак, вы говорите, это дизайнер. Это означает, что на каждой вашей форме или контроле у вас есть один? Как насчет использования некоторого уровня доступа к данным?
  • 0
    Как я уже сказал, это унаследованная кодовая база, которая вначале не была разработана очень хорошо. Существует DAL с адаптерами таблиц, затем есть BLL со службами WCF, который возвращает эти адаптеры таблиц, поэтому все адаптеры таблиц проходят вплоть до пользовательского интерфейса. Но сейчас это не проблема, поскольку мы пытаемся переходить по одному шагу за раз, и на этот раз он переключается с устаревшего System.Data.OracleClient на новый Oracle.DataAccess.Client . Но это BindByName затрудняет, потому что у нас есть около 100 TableAdapter.
Показать ещё 6 комментариев
Теги:
odp.net
system.data.oracleclient

1 ответ

0
Лучший ответ

Что я сделал, я расширил каждый 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню