Добрый день!
Мы так же провели много исследований, и вот, что выяснили.
В принципе, раз с версии 2015.1.0.0 уже нет необходимости в Stimulsoft.Report.OracleODP.dll, то мы решили от неё избавится. К слову у нас 325 отчётов, из них 265 в которых используется статически определённый Connection и DataSource.
Соответственно, мы написали процедуру, которая загружает последовательно каждый blob (отчёт mrt) из базы, меняет в нём по адресу XPath "
StiSerializer/Dictionary/Databases", далее для одного коннекта (он всегда там один) значение атрибута type с "
Stimulsoft.Report.Dictionary.StiOracleODPDatabase" на "
Stimulsoft.Report.Dictionary.StiOracleDatabase".
Аналогично в пути "
StiSerializer/Dictionary/DataSources" для одного DataSource (он так же один для этого коннекта) значение атрибута type с "
Stimulsoft.Report.Dictionary.StiOracleODPSource" на "
Stimulsoft.Report.Dictionary.StiOracleSource".
Таким образом меняем все blob'ы (отчёты в базе), компилируем проект под 2015.1.10.0 и всё работает, теперь без использования Stimulsoft.Report.OracleODP.dll, что не может не радовать.
Однако, столкнулись с другой проблемой, которую можно получить ТОЛЬКО, если делать SELECT FROM TABLE из Stored procedure Oracle, а с помощью SELECT FROM DUAL не удалось получить ошибку.
В приложении два файла: один, где работает, а другой, где не работает.
Суть такая, что у нас есть Stored procedure Oracle, из которой мы выбираем поля, и есть параметр типа decimal (в Oracle у нас это Number), соответственно, когда значение меньше Int32.Max (т.е. 2,147,483,647), то всё работает, а когда больше, то получаем исключение вида:
Version: 2015.1.10 from 26 June 2015
v4.0.30319
Value was either too large or too small for an Int32.
mscorlib
at System.Decimal.FCallToInt32(Decimal d)
at System.Decimal.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ToInt32(Object value)
at Oracle.DataAccess.Client.OracleParameter.PreBind_Int32()
at Oracle.DataAccess.Client.OracleParameter.PreBind(OracleConnection conn, IntPtr errCtx, Int32 arraySize)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at Stimulsoft.Report.Dictionary.StiSqlSource.RetrieveData(Boolean schemaOnly) in d:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Report\Dictionary\DataSources\Sql\StiSqlSource.cs:line 341
В нерабочем примере в событии BeginRender есть код:
Код: Выделить всё
rep_bill.Parameters["DOC_CODE"].ParameterValue = 4004219026;
Вот, когда происходит выборка данных, то получаем этот Exception.
Примечание: Проблему обнаружили случайно, т.к. в Москве коды документов меньше миллиарда, а в других регионах цифры уже конечно больше Int32. То есть, вот этот код документа 4004219026 (из Ростова) помог нам найти этот баг.
Ждём скорейшего решения проблемы, т.к. пользователи уже ждут этот предрелизный билд, т.к. в нём вы исправили проблему с компрессией jpeg'ов (из этого поста
http://forumru.stimulsoft.com/viewtopic.php?f=8&t=4222), а тут ещё теперь и документы не печатаются, - пришлось "откатываться" пока на 2015.1.0.0.