Проблема с параметрами запросов

Обсуждение Stimulsoft Reports.NET
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Проблема с параметрами запросов

Сообщение fantomus »

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

Stimulsoft Reports.Net 2009.3.511
Использовал Stimulsoft.Report.OracleClient.dll.

Создаю источник данных (OleDB, Oracle, Oracle Provider for OleDB).

Запрос:
select 1 from dual where :p1 = 5 or :p1 < 0
При открытии источника возникает ошибка:
"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

Такая ошибка возникает если в запросе один и тот же параметр встречается больше одного раза.
От типа параметра не зависит.
Похоже ошибка при биндинге параметров.

Спасибо.
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Проблема с параметрами запросов

Сообщение Jan »

Здравствуйте,
"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Такая ошибка встречается при попытке чтения защищенной памяти из неуправляемого кода. В нашем генераторе отчетов практически не используется неуправляемый код (только в некоторых экспортах для обратки изображений). Значит ошибка произошла где то в недрах .Net или в коде адаптера Oracle. Можно увидеть полный стек ошибки?

Спасибо.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Проблема с параметрами запросов

Сообщение fantomus »

----------------------------
[Customer Explanation]
----------------------------
[General Info]
Application: Stimulsoft Reports.Net
Framework: v2.0.50727
Version: Version: 2009.3.511 from 12 October 2009
MachineName: nnn
OSVersion: Microsoft Windows NT 5.1.2600 Service Pack 3
UserName: uuu
----------------------------
[Exception Info]
Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Source: System.Data

StackTrace:
at System.Data.Common.UnsafeNativeMethods.ICommandText.Execute(IntPtr pUnkOuter, Guid& riid, tagDBPARAMS pDBParams, IntPtr& pcRowsAffected, Object& ppRowset)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at Stimulsoft.Report.Dictionary.StiOleDbSource.UpdateParameters()
at Stimulsoft.Report.Dictionary.StiOleDbAdapterService.ConnectDataSourceToData(StiDictionary dictionary, StiDataSource dataSource, Boolean loadData)
at Stimulsoft.Report.Dictionary.StiDataSource.Connect(StiDataCollection datas, Boolean loadData)
at Stimulsoft.Report.Dictionary.StiDataSource.Connect(Boolean loadData)
at Stimulsoft.Report.Design.Dictionary.StiViewDataForm.Build()

----------------------------
[Assemblies]
mscorlib, Version = 2.0.0.0
Stimulsoft.Base, Version = 2009.3.511.0
Stimulsoft.Controls, Version = 2009.3.511.0
Stimulsoft.Report, Version = 2009.3.511.0
Stimulsoft.Report.Design, Version = 2009.3.511.0
Stimulsoft.Report.Win, Version = 2009.3.511.0
System, Version = 2.0.0.0
System.Drawing, Version = 2.0.0.0
System.Windows.Forms, Version = 2.0.0.0
System.Xml, Version = 2.0.0.0
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Проблема с параметрами запросов

Сообщение fantomus »

С ODP все в порядке.
Нормально работает в аналогичной ситуации у меня в программах.
Да и в том же FastReport.Net работает правильно.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Проблема с параметрами запросов

Сообщение Edward »

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

Проверил сейчас работу с параметрами для Oracle 10g и cо стандартным провайдером OleDb и с доступным на сайте:

http://www.stimulsoft.com/Downloads/OracleDatabase.zip

OracleConnector.

Для работы с пререлизом 2009.3.511 Database pack из "OracleDatabase.zip" обязательно перекомпилировал, т.е. с изменением Stimulsoft dll каждый раз нужно перекомпилировать и Database pack.

Все работало без вопросов в обоих случаях.

Имя параметра указал как :p1

Какая версия Oracle у Вас установлена?
fantomus писал(а):Stimulsoft Reports.Net 2009.3.511
Использовал Stimulsoft.Report.OracleClient.dll.
Скорее всего Вам необходимо пересобрать и коннектор и Ваш проект с библиотеками версии 2009.3.511.

Библиотеку Stimulsoft.Report.OracleClient.dll лучше сразу удалите и из папки Вашего приложения и из папки "Stimulsoft.Report.OracleClient" чтобы быть уверенным, что библиотека будет использована новая.

Спасибо.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Проблема с параметрами запросов

Сообщение fantomus »

- Удалил все Stimulsoft.Report.OracleClient.dll
- Скачал заново OracleDatabase.zip
- Скомпилировал
- Скопировал Stimulsoft.Report.OracleClient.dll в c:\Program Files\Stimulsoft Reports.Net 2009.2\Bin\
- Запустил c:\Program Files\Stimulsoft Reports.Net 2009.2\Bin\Designer.exe
- Создал соединение: Новое соединение - OleDB соединение - Oracle Provider for OleDB
- Создал источник данных:
select * from dual where :a = :a
- Создаю параметр "а" типа Integer
- Нажимаю "просмотреть результаты запроса" - ошибка
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Проверил на 2 версиях Oracle Server 9.2.0.6 и 10.2.0.1.

Кстати, в не которых случаях при использовании типа параметра Variant возникает другая ошибка, но закономерность я пока не определил.
Такого типа:
ROW-00001: Cannot allocate memory

fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Проблема с параметрами запросов

Сообщение fantomus »

Кстати, в свойствах параметра имя можно указывать без двоеточия, а в запросе (естественно) с двоеточием обязательно.
Работает и так и так.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Проблема с параметрами запросов

Сообщение fantomus »

По ходу обнаружил проблемы с созданием и переименованием соединений.
Создание:
- Создаем новое соединение "Соединение1"
- Создаем еще одно соединение с таким же именем.
Первое соединение заменяется новым без предупреждений

Переименование:
- Создаем новое соединение "Соединение1"
- Переименовываем его в "Соединение2"
При этом "Соединение1" остается, но становится недоступным для редактирования и появляется новое соединение "Соединение2" с пустыми свойстами.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Проблема с параметрами запросов

Сообщение Edward »

Здравствуйте.
По ходу обнаружил проблемы с созданием и переименованием соединений.
Создание:
- Создаем новое соединение "Соединение1"
- Создаем еще одно соединение с таким же именем.
Первое соединение заменяется новым без предупреждений
В каждом источнике данных просто хранится текстовое значение содержащее имя соответствующего "Соединения". Если Вы измените любое из "Соединение1", в "Соединение2", то оставшееся "Соединение1" и будет использовано.
Переименование:
- Создаем новое соединение "Соединение1"
- Переименовываем его в "Соединение2"
При этом "Соединение1" остается, но становится недоступным для редактирования и появляется новое соединение "Соединение2" с пустыми свойствами.
Зто происходит потому, что "Соединение1" отсутствует, а ссылки в источниках данных на него остались. Как только вновь появляется "Соединение1" - (в runtime или в design-time), то все работает как предполагалось.
- Удалил все Stimulsoft.Report.OracleClient.dll
- Скачал заново OracleDatabase.zip
- Скомпилировал
- Скопировал Stimulsoft.Report.OracleClient.dll в c:\Program Files\Stimulsoft Reports.Net 2009.2\Bin\
- Запустил c:\Program Files\Stimulsoft Reports.Net 2009.2\Bin\Designer.exe
- Создал соединение: Новое соединение - OleDB соединение - Oracle Provider for OleDB
- Создал источник данных:
select * from dual where :a = :a
- Создаю параметр "а" типа Integer
- Нажимаю "просмотреть результаты запроса" - ошибка
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Как ни пытался, не смог воспроизвести - ни с версией 2009.2.500 ни 2009.3.511.

А нет ли у Вас в GAC наших библиотек? В этом случае что-то подобное возможно и происходило бы при использовании разных версий в одном проекте одновременно в OracleConnector и в основном приложении.

Какую версию Windows Вы используете?
Кстати, в не которых случаях при использовании типа параметра Variant возникает другая ошибка, но закономерность я пока не определил.
Такого типа:
ROW-00001: Cannot allocate memory
Если получится воспроизвести и найти закономерность, дайте, пожалуйста, знать, будем рады исправить.

Спасибо.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Проблема с параметрами запросов

Сообщение fantomus »

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

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

Но это меня не сильно пока беспокоит.
Можно обсудить позже в отдельной ветке.
Ответить