2009-12-08 3 views
0

У меня есть некоторые странные проблемы с параметризованными запросами в прямом режиме.Проблемы прямого режима поставщика Oracle с параметризованными запросами

В принципе, если я выполняю вставку на таблицу, которая уже содержит уникальную строку, я получаю исключение вставки, которое ожидается. После исключения вставки я использую это же соединение для захвата информации, для которой данные уже заблокированы, чтобы сообщить об этом пользователю (я знаю, что соединение по-прежнему хорошо на данном этапе). Это соединение затем закрывается и возвращается в пул, все это прекрасно до этого момента, как и ожидалось.

В более поздний момент времени, когда это соединение убирается из пула, я пытаюсь выполнить простой запрос параметризованного обновления, и я получаю следующее исключение: ORA-01008: не все связанные переменные. Это имело бы смысл получить, если бы все переменные не были связаны, однако, глядя на коллекцию OracleParameter, я могу ясно видеть, что все параметры существуют и что их значения верны. Не говоря уже о том, что этот запрос запускается несколько раз, прежде чем это соединение будет захвачено из пула для других подключений в пуле, поскольку это общая таблица обновлений, которая обновляется для каждого запроса клиента. Кроме того, весь этот код отлично работает, когда прямой режим отключен с использованием клиента oracle (тот же код и выполнение запроса, что и в прямом режиме).

По существу, по какой-либо причине в прямом режиме, когда вставка выполнена и выходит из строя, и соединение закрывается и помещается обратно в пул, что соединение становится поврежденным и не работает при повторном использовании с параметризованными запросами.

Я бы выпустил простой образец, за исключением единственной проблемы, заключающейся в том, что эта проблема не надежно воспроизводима в простом случае.

Информация:

  • Это приложение клиент-сервер. Проблема возникает даже с одним клиентом.
  • Соединение создается и захватывается из пула для каждого запроса клиента и закрывается после выполнения запроса.
  • Каждое соединение используется в пределах одного потока (не для нескольких потоков)
  • Использование последних версий Devart.Data.Oracle 5.35.54 и Devart.Data 5.0.16, и я также попытался использовать предыдущую версию с такие же результаты.

Если какой-либо один наткнулась это или имеет какие-либо идеи, ваша помощь будет высоко оценена

благодаря

ответ