Список объектов БД для Oracle Connection

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

Список объектов БД для Oracle Connection

Сообщение fantomus »

Здравствуйте.
Редактор работает нормально.
Осталось решить вопросы со спиком объектов, Edit Data Source и QueryBuilder ...
Anton Lozovskiy
Сообщения: 264
Зарегистрирован: 12 ноя 2007, 08:16

Список объектов БД для Oracle Connection

Сообщение Anton Lozovskiy »

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

>>1. Edit Data Source – при наличии изменений по кнопке «Cancel» не выдается запрос подтверждения закрытия окна (по нажатию на крестик спрашивает)
Все работает правильно. Запрос выдается для случаев, если пользователь нажал Escape или Alt+F4. А на «Cancel» его просто не должно быть!

>>2. QueryBuilder – возникает необработанная ошибка при наличии в запросе полей типа BLOB, CLOB (возможно и прочих бинарных, типа LONG и пр.):
The following exception occurred in the DataGridView: System.ArgumentException: Parameter is not valid.
К сожалению, пока остается так как есть, мы не можем ничего изменить.

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

Список объектов БД для Oracle Connection

Сообщение fantomus »

Здравствуйте!
Anton писал(а): >>1. Edit Data Source – при наличии изменений по кнопке «Cancel» не выдается запрос подтверждения закрытия окна (по нажатию на крестик спрашивает)
Все работает правильно. Запрос выдается для случаев, если пользователь нажал Escape или Alt+F4. А на «Cancel» его просто не должно быть!
Может быть в Вашем решении и есть некий глубокий смысл, но лично я таких решений больше не встречал...
Если данные не были сохранены, то какая разница, каким именно способом пользователь закрывает окно?
Это ведь защита от ошибки, а юзер в любом случае может ошибиться.
Например, юзер привык к линуксовому расположению кнопок ("ОК" справа) и случайно нажал "Cancel".
Кроме того, в том же "Query Builder" поведение другое, запрос выдается даже на нажатие кнопки "Close".
В целом это не проблема, но я такое поведение считаю нелогичным.
Anton писал(а): >>2. QueryBuilder – возникает необработанная ошибка при наличии в запросе полей типа BLOB, CLOB (возможно и прочих бинарных, типа LONG и пр.):
The following exception occurred in the DataGridView: System.ArgumentException: Parameter is not valid.
К сожалению, пока остается так как есть, мы не можем ничего изменить.
Очень жаль. Это досадное упущение...
Хорошо, хоть в просмотре данных "View Data..." все правильно работает.
Похоже, что Вы используете сторонний Query Builder и потому не можете оперативно исправить.

Ну да ладно, это мелочи.

У меня есть просьба посерйознее.
Большая просьба - добавьте отдельный адаптер для Oracle ODP.NET!
Он очень просто делается на базе стандартного.
Нужны лишь косметические правки связанные с заменой библиотеки System.Data.OracleClient на Oracle.DataAccess.Client да подправить ф-ию ConvertDbTypeToTypeInternal.
Кроме того, есть веская причина добавить адаптер для ODP.NET - Microsoft прекращает разработку Oracle Client в ADO.NET 4.
Это уже год как известно.

Присоединил свой вариант под ODP.NET.
(он пока без получения списка объектов)
Вложения
Stimulsoft.Report.OracleClientODP.rar
(322.63 КБ) 170 скачиваний
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Список объектов БД для Oracle Connection

Сообщение Jan »

Здравствуйте,
Может быть в Вашем решении и есть некий глубокий смысл, но лично я таких решений больше не встречал...
Если данные не были сохранены, то какая разница, каким именно способом пользователь закрывает окно?
Это ведь защита от ошибки, а юзер в любом случае может ошибиться.
Например, юзер привык к линуксовому расположению кнопок ("ОК" справа) и случайно нажал "Cancel".
Кроме того, в том же "Query Builder" поведение другое, запрос выдается даже на нажатие кнопки "Close".
В целом это не проблема, но я такое поведение считаю нелогичным.
Пока оставим все как есть.
Это досадное упущение...
Хорошо, хоть в просмотре данных "View Data..." все правильно работает.
Похоже, что Вы используете сторонний Query Builder и потому не можете оперативно исправить.
Так и есть. Очень большие сложности с изменением этого компонента - как по программной части так и по лицензионной.
Большая просьба - добавьте отдельный адаптер для Oracle ODP.NET!
Он очень просто делается на базе стандартного.
Нужны лишь косметические правки связанные с заменой библиотеки System.Data.OracleClient на Oracle.DataAccess.Client да подправить ф-ию ConvertDbTypeToTypeInternal.
Кроме того, есть веская причина добавить адаптер для ODP.NET - Microsoft прекращает разработку Oracle Client в ADO.NET 4.
Это уже год как известно.
Сделаем. Здесь потом отпишемся.

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

Список объектов БД для Oracle Connection

Сообщение Jan »

Hello,

Добавили адаптер на страницу Downloads. Добавили поддержку адаптера в генератора отчетов. Дайте знать если что-то не так.

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

Список объектов БД для Oracle Connection

Сообщение fantomus »

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

Поправьте, пожалуйста ссылку на новый адаптер.
Обе ссылки (стандартный адаптер и ODP) сейчас указывают на один файл:
http://www.stimulsoft.com/Downloads/OracleDatabase.zip

Спасибо
Andrew
Сообщения: 586
Зарегистрирован: 09 июн 2006, 12:22

Список объектов БД для Oracle Connection

Сообщение Andrew »

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

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

Список объектов БД для Oracle Connection

Сообщение fantomus »

Мне кажется, что работа с типами параметров не совсем корректно реализована, хотя почти все нормально работает.
В стандартном адаптере список типов такой:

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

    public enum OracleType
    {
        BFile = 1,
        Blob = 2,
        Char = 3,
        Clob = 4,
        Cursor = 5,
        DateTime = 6,
        IntervalDayToSecond = 7,
        IntervalYearToMonth = 8,
        LongRaw = 9,
        LongVarChar = 10,
        NChar = 11,
        NClob = 12,
        Number = 13,
        NVarChar = 14,
        Raw = 15,
        RowId = 16,
        Timestamp = 18,
        TimestampLocal = 19,
        TimestampWithTZ = 20,
        VarChar = 22,
        Byte = 23,
        UInt16 = 24,
        UInt32 = 25,
        SByte = 26,
        Int16 = 27,
        Int32 = 28,
        Float = 29,
        Double = 30,
    }
а в ODP он отличается:

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

    public enum OracleDbType
    {
        BFile = 101,
        Blob = 102,
        Byte = 103,
        Char = 104,
        Clob = 105,
        Date = 106,
        Decimal = 107,
        Double = 108,
        Long = 109,
        LongRaw = 110,
        Int16 = 111,
        Int32 = 112,
        Int64 = 113,
        IntervalDS = 114,
        IntervalYM = 115,
        NClob = 116,
        NChar = 117,
        NVarchar2 = 119,
        Raw = 120,
        RefCursor = 121,
        Single = 122,
        TimeStamp = 123,
        TimeStampLTZ = 124,
        TimeStampTZ = 125,
        Varchar2 = 126,
        XmlType = 127,
        Array = 128,
        Object = 129,
        Ref = 130,
        BinaryDouble = 132,
        BinaryFloat = 133,
    }
В случае ODP в свойствах параметра источника отображается список типов стандартного адаптера, и у меня есть подозрения, что не верно выполняется биндинг параметров.
Я по быстрому не нашел в коде места, где заполняется список типов для параметров.

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

Список объектов БД для Oracle Connection

Сообщение fantomus »

Пока вопрос снимается.
Так выходит, когда подключаешь одновременно обе библиотеки.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Список объектов БД для Oracle Connection

Сообщение fantomus »

Разбираемся дальше...

Удалил из GAC все библиотеки, установил новую версию в отдельную папку, скопировал туда Stimulsoft.Report.OracleODP.dll.
В процессе создания источника данных все работает нормально.
При попытке просмотра отчета ошибка:
----------------------------
[General Info]
Application: Stimulsoft Reports.Net
Framework: v2.0.50727
Version: Version: 2010.2.711 from 26 April 2010
OSVersion: Microsoft Windows NT 6.1.7600.0
----------------------------
[Exception Info]
Message: Referenced assembly 'Stimulsoft.Report.OracleClient.dll' not found
Source: Stimulsoft.Report

StackTrace:
at Stimulsoft.Report.StiReport.GetReferencedAssemblies()
at Stimulsoft.Report.StiReport.Compile(String path, Stream stream, StiOutputType outputType, Boolean autoCreate, Object standaloneReportType)
at Stimulsoft.Report.StiReport.Compile()
at Stimulsoft.Report.Design.Controls.StiDesignerPreviewControl.btRefresh_Click(Object sender, EventArgs e)

----------------------------
[Assemblies]
mscorlib, Version = 2.0.0.0
Stimulsoft.Base, Version = 2010.2.711.0
Stimulsoft.Report, Version = 2010.2.711.0
Stimulsoft.Report.Design, Version = 2010.2.711.0
System.Windows.Forms, Version = 2.0.0.0
Подкладываю Stimulsoft.Report.OracleClient.dll.
Ошибка:
----------------------------
[General Info]
Application: Stimulsoft Reports.Net
Framework: v2.0.50727
Version: Version: 2010.2.711 from 26 April 2010
OSVersion: Microsoft Windows NT 6.1.7600.0
----------------------------
[Exception Info]
Message: Unable to cast object of type 'Oracle.DataAccess.Client.OracleDataAdapter' to type 'System.Data.OracleClient.OracleDataAdapter'.
Source: Stimulsoft.Report.OracleClient

StackTrace:
at Stimulsoft.Report.Dictionary.StiOracleSource.UpdateParameters()
at Stimulsoft.Report.Dictionary.StiOracleAdapterService.ConnectDataSourceToData(StiDictionary dictionary, StiDataSource dataSource, Boolean loadData)
at Stimulsoft.Report.Dictionary.StiDataSource.Connect(StiDataCollection datas, Boolean loadData)
at Stimulsoft.Report.Dictionary.StiDataSourcesCollection.Connect(StiDataCollection datas, Boolean loadData)
at Stimulsoft.Report.Dictionary.StiDictionary.Connect(Boolean loadData)
at Stimulsoft.Report.Engine.StiRenderProviderV2.ConnectToData(StiReport report)
at Stimulsoft.Report.Engine.StiRenderProviderV2.Render(StiReport report, StiRenderState state)
at Stimulsoft.Report.Engine.StiReportV2Builder.RenderSingleReport(StiReport masterReport, StiRenderState renderState)
at Stimulsoft.Report.StiReport.RenderReport(StiRenderState renderState)
at Stimulsoft.Report.StiReport.Render(StiRenderState renderState, StiGuiMode guiMode)
at Stimulsoft.Report.StiReport.Render(Boolean showProgress)
at Stimulsoft.Report.Design.Controls.StiDesignerPreviewControl.btRefresh_Click(Object sender, EventArgs e)

----------------------------
[Assemblies]
mscorlib, Version = 2.0.0.0
Stimulsoft.Base, Version = 2010.2.711.0
Stimulsoft.Report, Version = 2010.2.711.0
Stimulsoft.Report.Design, Version = 2010.2.711.0
System.Windows.Forms, Version = 2.0.0.0
Ответить