Подключение и работа с Oracle
Listopad
Хабаровск
Пытаюсь подключиться к Oracle через строку соединения
Provider=msdaora;Password=ПАРОЛЬ;User ID=ПОЛЬЗОВАТЕЛЬ_БД;Data Source=ИМЯ_СЕРВЕРА_БД;Persist Security Info=True
Делаю тест соединения - успешно. Соединение появляется в источниках данных, но у таблицы из данного соединения не показываются столбцы и соответственно никакие данные из нее я получить немогу.
Также попробовала использовать FastReport.Oracle.dll. В списке типов подключений появилось "Подключение к Oracle". Ввожу необходимые данные, нажимаю тест - все снова успешно. Но теперь даже таблицы БД, которые можно выбрать, он не показывает.
Подскажите, в чем проблема? )
Provider=msdaora;Password=ПАРОЛЬ;User ID=ПОЛЬЗОВАТЕЛЬ_БД;Data Source=ИМЯ_СЕРВЕРА_БД;Persist Security Info=True
Делаю тест соединения - успешно. Соединение появляется в источниках данных, но у таблицы из данного соединения не показываются столбцы и соответственно никакие данные из нее я получить немогу.
Также попробовала использовать FastReport.Oracle.dll. В списке типов подключений появилось "Подключение к Oracle". Ввожу необходимые данные, нажимаю тест - все снова успешно. Но теперь даже таблицы БД, которые можно выбрать, он не показывает.
Подскажите, в чем проблема? )
Комментарии
FastReport.Oracle.dll знает особенности диалекта оракла. Кроме того, он показывает только те таблицы, что доступны пользователю:
OracleDataConnection.cs:
Проблема с подключением к Ораклу.
Я заново переустановила винду и поставила репорт.
Сделала dll с помощью выложенной на сайте программы, добавила ее в плагины.
Строка "Подключение к Оракл" не появилась в списке источников подключения.
Что не так?
И еще вопрос: какой должен быть фреймворк? И вообще принципиальна ли для фаст репорта версия фреймворка?
На компьютер установлен Windows Server 2000, .Net FrameWork 2.0 и FastReport.Net текущей версии (от 26.11.2009).
Для того, чтобы появилась возможность работы с Oracle используем файл FasrReport.Oracle.dll.
Файл был получен путем исполнения проекта, скаченного с официального сайта. Затем dll была добавлена в плагины проекта Fast Report и скопирована в корневой каталог Fast Report.
Но строка "Подключение к Oracle" в списке возможных подключений не появилась и, соответственно, никакие отчеты, которые обращаются к Oracle не работают.
Подскажите, в чем может быть проблема?
Замечание: Запуск проекта для генерации dll был выполнен на другой машине. Это как то влияет на работоспособность FasrReport.Oracle.dll?
Необходимо перекомпилировать проект FastReport.Oracle именно с той версией FastReport.dll, с которой он будет работать.
Скажите, а нельзя сразу с новой версией FastReport.Net выкладывать FastReport.Oracle.dll и dll для других подключений? Я думаю, что это сократило бы проблемы, связанные с компиляцией проекта для создания dll.
Я поставила новую версию FastReport и получила новый файл FastReport.Oracle.dll с помощью новой FastReport.dll. В результате перестали работать все отчеты, которые используют в своих запросах подзапросы. Текст запроса формируется в обработчике события кнопки OK. Раньше (со старой версией) все работало прекрасно.
Затем я удалила новую версию и поставила старую. Получила опять новый файл FastReport.Oracle.dll для староой FastReport.dll. Теперь вообще ничего не работет. Он ругается на функции ToDouble и IIF, которые используются на странице отчета: "The name 'ToDouble' does not exist in the current context"...
Вопрос: что не так я делаю?
FastReport никак не обрабатывает текст запроса. Он просто передает его в соответствующий DataAdapter (в данном случае - в OracleDataAdapter). Каким образом перестали работать отчеты? Выдается какая-то ошибка?
У меня есть запрос с подзапросом (например: select * from (select * from table1 where <условие1>) where <условие2>).
Если я пишу этот запрос в визуальном режиме (в мастере запроса), то он пишет, что у меня неверный синтаксис или отсутствует кавычка. А если я формирую текст запроса в обработчике кнопки OK:
TableDataSource data = Report.GetDataSource("название запроса/таблицы, созданной на основе запроса с помощью мастера)") as TableDataSource;
data.SelectCommand = "текст запроса с подзапросом";
то все работало прекрасно.
Теперь, после установки новой версии, при нажатии на кнапку предварительный просмотр выдается такая же ошибка, как если бы я писала запрос в масетер запросов - неверный синтаксис или отсутствует кавычка...
Я уже запуталась и ничего не могу понять...
OracleDataAdapter насколько я понимаю работает всегда, если фреймворк установлен. Или нет?
Запрос рабочий. Запустила его в Оракле через SQL Navigator - все работает...
TableDataSource data = Report.GetDataSource("Table") as TableDataSource;
data.SelectCommand = "select * from (select street_name, home_nomer from home_address where rep_month = '200910')";
Вылетает ошибка:
FastReport.Net v1.2.76
Syntax Error: Expecting identifier or quoted identifier.
at System.Data.OracleClient.DbSqlParser.Parse2(String statementText)
at System.Data.OracleClient.OracleDataReader.FillSchemaTable(DataTable schemaTable)
at System.Data.OracleClient.OracleDataReader.GetSchemaTable()
at System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.FillSchemaFromReader(DataSet dataset, DataTable datatable, SchemaType schemaType, String srcTable, IDataReader dataReader)
at System.Data.Common.DataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType, IDataReader dataReader)
at System.Data.Common.DbDataAdapter.FillSchemaInternal(DataSet dataset, DataTable datatable, SchemaType schemaType, IDbCommand command, String srcTable, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType)
at FastReport.Data.DataConnectionBase.FillTableSchema(DataTable table, String selectCommand, CommandParameterCollection parameters)
at FastReport.Data.DataConnectionBase.CreateTable(TableDataSource source)
at FastReport.Data.TableDataSource.InitSchema()
at FastReport.Data.DataSourceBase.Init(Relation relation, String filter, SortCollection sort)
at FastReport.Data.DataSourceBase.Init(DataSourceBase parentData, String filter, SortCollection sort)
at FastReport.DataBand.InitDataSource()
at FastReport.Engine.ReportEngine.1GPpYtHLZ(DataBand )
at FastReport.Engine.ReportEngine.cAirvlDgJK(BandCollection )
at FastReport.Engine.ReportEngine.pSgrSWshrY(ReportPage )
at FastReport.Engine.ReportEngine.j3Yrcq3Ylm()
at FastReport.Engine.ReportEngine.3Wvvvrefl(ReportPage )
at FastReport.Engine.ReportEngine.YbDkpa6gH(Boolean , Boolean , ReportPage )
at FastReport.Report.Prepare(Boolean append)
at FastReport.Report.Prepare()
at Amd140Cl7TpdHtxdRZu.MWt5XmCLmAnZKvhdqPV.7XwPCKxrw()
А вот этот запрос не вызывает ошибок: select street_name, home_nomer from home_address where rep_month = '200910'
Попробуйте скачать отсюда:
http://www.fast-report.com/pbc_download/files/OraTest.zip
http://support.microsoft.com/kb/892464
Проект OraTest.zip будет работать в том виде, в каком он есть. Ошибка будет, если заменить код (вместо Fill использовать FillSchema):
К сожалению, метод FillSchema необходим в FastReport.
а) не использовать вложенные запросы. Не очень хороший вариант - я читал, что у стандартного адаптера есть проблемы и с некоторыми простыми запросами;
б) вместо стандартного адаптера использовать оракловский из комплекта Oracle ODAC. Для него есть фастрепортовская обертка в папке FastReport.OracleODP. Вложенные запросы при этом работают корректно.
Значит проблема не в OracleClient...
С FillSchema выдается та же ошибка...
Попробуем скачать ODP.NET...
А с какой минимальной версией Oracle это будет работать? С 11? Что делать, если у меня версия Oracle старше?
Oracle Data Access Components (ODAC) for Windows Installation Instructions
32-bit Release 11.1.0.7.20
System Requirements
Access to an Oracle Database Server (Oracle 9i Release 2 or later)
Рекомендую использовать именно ODP.NET.
Больше возможностей и меньше проблем по сравнению с провайдером от Microsoft.
Я использовал версию 11.1.0.6.21 и 11.1.0.7.20.
Кроме того, используйте в запросах вместо литералов параметры:
вместо
rep_month = '200910'
используйте
rep_month = :p_rep_month
и нужное значение передавайте параметром
Спасибо. У меня версия еще старше) У меня 8.1.7.0.0 )))
Так что обойдусь без ODP.NET...
У меня раньще все работало... Раньше - это когда был провайдер от Microsoft.
Так что я поставила снова старую версию FastReport.Net Win+WebForms Single license 1.1 (стабильная версия) 2009-05-29. С этой версией у меня работало все. Даже подзапросы. Никаких проблем не возникало, пока я не поставила новую версию программы.
Теперь возникли проблемы с функциями - они вообще пропали. Их нет в панеле инструментов Данные. И когда я запускаю отчет с функциями FastReport ругается на функции. У меня к примеру используются IIf и ToDouble.
Как в старую версию вернуть функции? )))
Перепробовала все ранее скаченные версии. И в одной из них все заработало - и подзапросы, и функции. Это версия FastReport.Net Win+WebForms Single license 1.1 (текущая версия) 2009-08-07. Так что видимо функции все же появились раньше, чем в версии 1.2.
32-bit Release 10.2.0.2.21
System Requirements
Access to an Oracle Database Server (Oracle8i Release 3 or later)
Можно взять и более старую версию.
Все будет работать.
Возможно это была счастливая случайность...
А по поводу параметров запросов хорошо подумайте.
Вы можете наступить на грабли, на которые уже наступили все разаработчики под Оракл.
Использование динамического формирования sql без связывания параметров, ухудшает производительность сервера.
Это, конечно, зависит от количества запросов и настроек сервера...