Страница 1 из 3
Проблема с параметрами запросов
Добавлено: 28 окт 2009, 08:25
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."
Такая ошибка возникает если в запросе один и тот же параметр встречается больше одного раза.
От типа параметра не зависит.
Похоже ошибка при биндинге параметров.
Спасибо.
Проблема с параметрами запросов
Добавлено: 29 окт 2009, 17:34
Jan
Здравствуйте,
"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Такая ошибка встречается при попытке чтения защищенной памяти из неуправляемого кода. В нашем генераторе отчетов практически не используется неуправляемый код (только в некоторых экспортах для обратки изображений). Значит ошибка произошла где то в недрах .Net или в коде адаптера Oracle. Можно увидеть полный стек ошибки?
Спасибо.
Проблема с параметрами запросов
Добавлено: 30 окт 2009, 03:49
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
Проблема с параметрами запросов
Добавлено: 30 окт 2009, 04:02
fantomus
С ODP все в порядке.
Нормально работает в аналогичной ситуации у меня в программах.
Да и в том же FastReport.Net работает правильно.
Проблема с параметрами запросов
Добавлено: 30 окт 2009, 06:10
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" чтобы быть уверенным, что библиотека будет использована новая.
Спасибо.
Проблема с параметрами запросов
Добавлено: 30 окт 2009, 09:06
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
Проблема с параметрами запросов
Добавлено: 30 окт 2009, 10:12
fantomus
Кстати, в свойствах параметра имя можно указывать без двоеточия, а в запросе (естественно) с двоеточием обязательно.
Работает и так и так.
Проблема с параметрами запросов
Добавлено: 30 окт 2009, 10:19
fantomus
По ходу обнаружил проблемы с созданием и переименованием соединений.
Создание:
- Создаем новое соединение "Соединение1"
- Создаем еще одно соединение с таким же именем.
Первое соединение заменяется новым без предупреждений
Переименование:
- Создаем новое соединение "Соединение1"
- Переименовываем его в "Соединение2"
При этом "Соединение1" остается, но становится недоступным для редактирования и появляется новое соединение "Соединение2" с пустыми свойстами.
Проблема с параметрами запросов
Добавлено: 02 ноя 2009, 07:04
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
Если получится воспроизвести и найти закономерность, дайте, пожалуйста, знать, будем рады исправить.
Спасибо.
Проблема с параметрами запросов
Добавлено: 02 ноя 2009, 09:24
fantomus
Здравствуйте
По поводу создания/переименования.
Я понимаю почему это происходит, но считаю, что с точки зрения пользователя такое поведение не очень логично.
В первом случае пользователь случайно может заменить существующее соединение новым и отчет может перестать работать.
Во втором случае при переименовании соединения должны меняться и все ссылки не него.
Но это меня не сильно пока беспокоит.
Можно обсудить позже в отдельной ветке.