2011-10-07 105 views
13

当我使用我的C#代码运行pl/sql查询[通过存储过程]时,出现错误: 如何解决相同的问题?请指教。 注意:我在代码中传递了providerSpecificTypes的false。当执行pl/sql查询时出现溢出错误

Error Message: 
System.Data.OracleClient.OracleException: OCI-22053: overflow error 
at System.Data.Common.DbDataAdapter.FillErrorHandler(Exception e, DataTable dataTable, Object[] dataValues)  
at System.Data.Common.DbDataAdapter.FillLoadDataRowChunk(SchemaMapping mapping, Int32 startRecord, Int32 maxRecords)  
at System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)  
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) 
at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)  
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, 

下面是代码:

DataSet ds = new DataSet(); 
     try 
     { 
      this.OpenDBConnection(); 
      this.dbAdapter.ReturnProviderSpecificTypes = providerSpecificTypes; 
      this.dbAdapter.Fill(ds); 
     } 
     catch 
     { 
      throw; 
     } 
     finally 
     { 
      CloseDBConnection(); 
      this.cmd.Parameters.Clear(); 
     } 
      return ds; 

查询:

SELECT client_id, TO_CHAR (business_dt, 'MM/DD/YYYY') AS business_dt 
     , mkt_type 
     , mkt_name 
     , product_name 
     , period 
     , TO_CHAR (start_dt, 'MM/DD/YYYY') AS start_dt 
     , TO_CHAR (end_dt, 'MM/DD/YYYY') AS end_dt 
     , duration 
     , term 
     , NULL AS strike_price 
     , instrument_type 
     , final_price 
     , NULL AS product_price 
     , units 
     , NULL AS expiry_dt 
     , mkt_close 
     , cons_flag 
+1

请添加查询的其余部分。列的数据类型也不错 –

+0

什么数据库版本?什么是数据类型?确保您将Date或DateTime变量传递到您的TO_CHAR函数中... – manzwebdesigns

+0

数据库是Oracle 10g.Yes,正在将DateTime变量传递到to_char函数。谢谢。 – user74042

回答

27

一个选定列值的由具有精度超出NET的小数类型。解决此问题的最佳方法是将列值循环到可管理的预置大小。通常我将它们四舍五入为小数点后两位数,因为我不再需要它了,您可以根据自己的需要进行选择。

因此,在短期,改变你的查询,以便以更高的精度数都列四舍五入到您所需要的小数位数:

例子:

Select ROUND(final_price, 2) From <your table> 

应该解决您的问题。