ошибка при выполнении запроса: [07001] [oracle][odbc][ora]ora-01008: не все переменные привязаны
Здравствуйте.
Данные для отчета берутся через ODBC соединение к ORACLE.
Если отчет сложный и в нем используется несколько раз параметров, то появляется ошибка при запросе к БД:
кусок запроса, где используются параметры:
Если обращение к параметрам убрать, то все работает. Каждый из параметров имеет тип VarChar и значение по-умолчанию задано.
Данные для отчета берутся через ODBC соединение к ORACLE.
Если отчет сложный и в нем используется несколько раз параметров, то появляется ошибка при запросе к БД:
FastReport.Net v1.4.30
ERROR [07001] [Oracle][ODBC][Ora]ORA-01008: не все переменные привязаны
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.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 FastReport.Data.DataConnectionBase.FillTableData(DataTable table, String selectCommand, CommandParameterCollection parameters)
at FastReport.Data.DataConnectionBase.FillTable(TableDataSource source)
at FastReport.Data.TableDataSource.LoadData(ArrayList rows)
at FastReport.Data.DataSourceBase.trkypstP7()
at FastReport.Data.DataSourceBase.rcbCQnVMc(Relation , String , SortCollection , Boolean )
at FastReport.Data.DataSourceBase.3rHQb0dLF(DataSourceBase , String , SortCollection , Boolean )
at FastReport.DataBand.InitDataSource()
at FastReport.GroupHeaderBand.sXeI6hYfy()
at FastReport.Engine.ReportEngine.e0yafxMft(GroupHeaderBand )
at FastReport.Engine.ReportEngine.XWiIvSIuBr(BandCollection )
at FastReport.Engine.ReportEngine.LrrIFYO7Fm(ReportPage )
at FastReport.Engine.ReportEngine.YqTI4MG1pB()
at FastReport.Engine.ReportEngine.Tm44OcDc2(ReportPage )
at FastReport.Engine.ReportEngine.YLA5CXoVy(Boolean , Boolean , ReportPage )
at FastReport.Engine.ReportEngine.F5pvp0r7B(Boolean , Boolean )
at FastReport.Report.Prepare(Boolean append)
at FastReport.Report.Prepare()
at SC9pJRerha4FHI5Baem.FKxE3ceCvOHpD17tLcJ.FXtLRHRl7()
кусок запроса, где используются параметры:
and wtype_group.id_dp_org is not null
and wtype_group.dp_num is not null
and REQ.REQ_YEAR=to_char(to_date(:p_date,'dd.mm.yyyy'),'yyyy') /*Год*/
and (req.ID_DO=:p_dp or :p_dp=-1)/*ДП*/
and (wtype_group.id_dp_org=:p_contr or :p_contr=-1) /*Подрядчик*/
and (wtype_group.dp_num=:p_dog_num or :p_dog_num=-1) /*Номер договора*/
Если обращение к параметрам убрать, то все работает. Каждый из параметров имеет тип VarChar и значение по-умолчанию задано.
Комментарии
Я не мало времени потратил на разбирательства с подключениями к Ораклу.
Результат таков:
- через Odbc и OleDb не удалось добиться корректной работы с параметрами (ошибки аналогичны вашей)
Это не значит, что оно не работает совсем, просто стандартный способ работы с параметрами не работает, а другого способа я не нашел и бросил это дело.
- все нормально работает через подключения FastReport.Oracle и FastReport.OracleODP (скачивать в разделе "Дополнения")
Лично я использую FastReport.OracleODP, так как используется провайдер от самого Оракла (Oracle.DataAccess.Client), который развивается и поддерживает все нововведения новых версий оракловых серверов. В свою очередь, провайдер от Майкрософт (System.Data.OracleClient) официально прекратил свое развитие.
Да, для использования FastReport.OracleODP необходим Oracle Data Provider for .NET (ODP.NET).
Как правило, подобная ошибка возникает при попытке получить схему (набор колонок) таблицы. Используется следующий стандартный код (на примере Odbc):
За подобным поведением замечен также и стандартный System.Data.OracleClient.