Кэширование соединения при построении отчёта на Oracle

Обсуждение Stimulsoft Reports.NET
Ответить
Аватара пользователя
t0pdevice
Сообщения: 100
Зарегистрирован: 15 авг 2016, 09:59

Кэширование соединения при построении отчёта на Oracle

Сообщение t0pdevice »

Здравствуйте.
При построении отчёта с использование библиотеки для подключения к Oracle происходит следующая проблема.
1. Пользователь проходит авторизацию, к примеру, как USER1, работает в программе, строит отчёт Stimulsoft, в который передаётся соединение через:

Код: Выделить всё

report.Dictionary.Databases.Clear();
report.Dictionary.Databases.Add(new StiOracleDatabase("connect", connectionString.ConnectionString));
Видит корректные данные.
2. Пользователь через встроенные средства ПО делает смену учетной записи на USER2. Старые соединения с Oracle закрываются, происходит создание новых подключений к базе под новой учетной записью.
Пользователь формирует отчёт и у него некорректные данные, а именно от пользователя USER1.

Что делали:
  • Пробовали разные библиотеки ODP.NET и Devart, результат отрицательный
  • Пробовали разные версии Stimulsoft, результат отрицательный
  • Пробовали разные версии Oracle, результат отрицательный
  • Думали проблемы из-за пулинга, выключали его и также принудительно убивали все сессии на БД, результат отрицательный
По debug видно, что в report передается корректное соединение USER2, но он строит его все равно, как USER1
Если пользователь USER1 работал в программе и не строил отчёт, то сменившись на USER2 отчёт строится корректно.
Также чтобы отчёт строился правильно в случае проблемы помогает открытие его в ПО в режиме редактора и просто закрытие или получение данных по колонкам, то он строится затем правильно.

Складывается ощущение, что используется какой-то кэш где-то. StiOptions.Engine.ReportCache и другие свойства кэширования в отчёте - выключено.
С чем это может быть связано?
Аватара пользователя
t0pdevice
Сообщения: 100
Зарегистрирован: 15 авг 2016, 09:59

Re: Кэширование соединения при построении отчёта на Oracle

Сообщение t0pdevice »

Можно также проверить, добавив DataSource с именем role в отчёт, который покажет под каким пользователем он выполняется:

Код: Выделить всё

select user from dual
Затем в событие Report.BeginRender:

Код: Выделить всё

MessageBox.Show(role.USER);
Вот в сообщение показывается старый пользователь USER1 в данном случае, когда сменился на USER2.
Aleksey
Сообщения: 2761
Зарегистрирован: 22 апр 2010, 06:57

Re: Кэширование соединения при построении отчёта на Oracle

Сообщение Aleksey »

Здравствуйте,

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

Спасибо.
Аватара пользователя
t0pdevice
Сообщения: 100
Зарегистрирован: 15 авг 2016, 09:59

Re: Кэширование соединения при построении отчёта на Oracle

Сообщение t0pdevice »

Я в прицнипе описал все в примере, там обычный любой отчёт.
Aleksey
Сообщения: 2761
Зарегистрирован: 22 апр 2010, 06:57

Re: Кэширование соединения при построении отчёта на Oracle

Сообщение Aleksey »

Здравствуйте,

Попробуйте также очистить DataStore
report.Dictionary.DataStore.Clear();

Спасибо.
Ответить