powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема с Oracle+ADO.NET+Crystal Report
9 сообщений из 9, страница 1 из 1
Проблема с Oracle+ADO.NET+Crystal Report
    #39541333
cybert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Столкнулся со следующей проблемой. Есть база на Oracle 11.2, в ней есть табличная функция, а точнее - функция в составе пакета, которая возвращает набор

данных.

Делаю клиентское приложение к этой базе на Windows Forms+ADO.NET. Мне нужен параметризированный запрос, в котором я этой функции передаю параметр, а она

мне возвращает данные. Если я пишу такой запрос в PL/SQL Developer, то все гуд:
Код: plsql
1.
SELECT * FROM TABLE(MY_SCHEMA.MY_PACKAGE.MY_FUNCTION('1=1'))

'1=1' - это условие фильтрации, единственный строковой параметр функции.

Но когда я в приложении WindowsForms по этому запросу с помощью мастера пытаюсь создать DataTable - натыкаюсь на приколы. В схеме Right Click - Add -

Table Adapter - Use SQL Statement - пишу вышеупомянутый запрос, хоть с константой '1=1', хоть с параметром :MY_FILTER_CONDITION - натыкаюсь на ошибку

парсинга SQL-запроса:
Generated SELECT Statement
Error in FROM clause: near 'TABLE'
Unable to parse query text.

Если я пытаюсь создать набор данных, выбирая пункт "use existing stored procedure", то дальше мастер мне не предлагает варианта с типом возвращаемого значения - набор данных.
Получается, с помощью мастера я не могу создать типизированный набор данных, используя табличную функцию. Я обошел это, используя нетипизированный набор данных. Мой запрос выполняется, данные возвращаются. Но я не могу привязать к этому набору мой отчет на Crystal Reports. В дизайнере отчетов можно добавлять в отчет поля только из уже созданных типизированных наборов, а не с динамических (возможно, я ошибаюсь, но мой поиск варианта "добавить поле без указания источника данных" не увенчался успехом).
Я опять нашел обходное решение - создал DataTable, указав список одноименных полей вручную, натравил на него мой отчет, и потом следующим кодом запихнул туда данные из моего динамического датасета:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
using (OracleConnection conn = new OracleConnection(global::SPClient.Properties.Settings.Default.ConnectionStringPolt103))
            {
                conn.Open();

                OracleCommand comm = new OracleCommand(
                @"SELECT id, card_type_id, response_id, response_number, incident_created_date, disp_napr_user_id, disp_napr_name, place_of_trauma_id, 
                place_of_trauma_name, contact_id, contact_name, address, addr_cityblock_id, addr_cityblock_name, patient_fio, patient_age, abonent_fio, 
                abonent_phone, disp_103_user_id, disp_103_name, reaction_code_id, reaction_name, address_comment, requesteddate, accepteddate, 

arriveddate, 
                hospitalaccepteddate, completed_datetime, brig_arrived_to_station_dt, brigade_number, recall, doctor_id, doctor_name, intern_name, 

assistant1_id, 
                assistant1_name, assistant2_id, assistant2_name, assistant3_id, assistant3_name, assistant4_id, assistant4_name, driver_id, driver_name,
                was_printed, printed_datetime, printed_by_user_id, printed_by_user_fullname, ready_for_print
                FROM TABLE(POLT_BASE.PKG_ERIM.GET_CARDS_FOR_PRINT_FULL(:IN_FILTER_CONDITION))", conn);

                comm.BindByName = true;
                OracleParameter param = new OracleParameter(":IN_FILTER_CONDITION", OracleDbType.Varchar2);
                param.Value=filterCondition;
                comm.Parameters.Add(param);

                OracleDataAdapter adapter = new OracleDataAdapter(comm);

                DataSet ds = new DataSet();
                adapter.Fill(ds);

                rptCardCall myReport = new rptCardCall();
                myReport.Load("rptCardCall.rpt");

                myReport.SetDataSource(ds.Tables[0]);
                using (frmPreviewCard frm = new frmPreviewCard())
                {
                    frm.crCardViewer.ReportSource = myReport;
                    frm.ShowDialog();
                }
            }



Но это решение корявое, т. к. полей много, и создавать их ручками - дело неблагодарное.

Получается, что либо поддержка оракла в среде VisualStudio недоделана, либо я чего-то не знаю.

Посоветуйте плиз, как решить эту проблему.
Заранее спасибо.
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541406
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cybert,
Уверен что хранимку нельзя заменить вьюхой?
Уверен что в отчётнике нельзя внутри записать select .....
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541407
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cybert. В дизайнере отчетов можно добавлять в отчет поля только из уже созданных типизированных наборов, а не с динамических
Я этот отчётник не знаю.
Странно что в него нельзя добавить select ....
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541408
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cybertПолучается, что либо поддержка оракла в среде VisualStudio недоделана, либо я чего-то не знаю.
Если у тебя параметр простое where, то оберни храниику вьюшкой.
?
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541449
cybert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хранимку обернуть вьюшкой - наверное не вариант. Насколько я знаю, в оракле нет параметризированных вьюшек, а накладывать условие WHERE на вьюшку - тоже не вариант, т.к. в хранимке вытягиваются нужные мне данные из огромных таблиц, находящихся в другой базе. По поводу селекта внутри отчета - спасибо за подсказку, покопаю в этом направлении.
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541473
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cybertнакладывать условие WHERE на вьюшку - тоже не вариант, смешно.
)))
Ты счас доказываешь, что хранимка быстрее select from.
Срочно подумай.
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541476
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cybertнаходящихся в другой базе.
Материализованные вьюхи как раз для этого.
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541578
cybert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123 Материализованные вьюхи как раз для этого в моем случае материализовывать большие таблицы, которые постоянно обновляются, нет смысла.

Petro123 cybert
накладывать условие WHERE на вьюшку - тоже не вариант,
смешно.
)))
Ты счас доказываешь, что хранимка быстрее select from.
Срочно подумай.
я этого не говорил, с чего Вы взяли? Я лишь имел в виду, что в моем случае мою хранимку вьюшкой не заменишь, и одним селектом не оформишь.
Да это и не суть вопроса.
...
Рейтинг: 0 / 0
Проблема с Oracle+ADO.NET+Crystal Report
    #39541587
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cybert,
Если бы ты честно сказал, что там логика сложная с курсором for / while то и вопросов бы не было.
Но ты давал просто детские отмазки в защиту хранимки.
Сходи в топик ВМоисеев.
Удачи!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема с Oracle+ADO.NET+Crystal Report
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]