【问题标题】:Overflow error with OracleClient and C# 4.0OracleClient 和 C# 4.0 的溢出错误
【发布时间】:2013-01-04 16:59:19
【问题描述】:

我正在使用 Visual Studio 2010、Oracle Database 10g 和库 System.Data.OracleClient。我的问题是当我想在 batabase 中执行程序时,我得到一个溢出错误。我正在阅读并说我需要 ROUND 或 TRUNCT 数字,因为它太大了。但我无权访问数据库来更改程序。我得到的值来自带有 Out Direction 的 OracleParameter。你知道我该如何解决这个问题吗?

objCommand.Connection = objConnection;
objCommand.CommandText = "Procedure_name";
objCommand.CommandType = CommandType.StoredProcedure;
objCommand.Parameters.AddRange(parameters); //parameters is a OracleParameter array. I fill it previously.

objConnection.Open();
objCommand.ExecuteNonQuery(); //Here throw the exception

PS:该过程在 PL/SQL 中完美运行,并且最大的数量。数字是“1.66529411764706”;

PS2:同样,我没有更改程序的权限。我需要在 Visual Studio 中修复这个错误。

PS3:错误为 OCI-22053:溢出错误。这就是我从错误中得到的全部:(

谢谢!

parameters[0] = CreateParameter(PC_COD_CU, OracleType.VarChar, codCu);
parameters[1] = CreateParameter(PC_COD_EM, OracleType.VarChar, codEm);
parameters[2] = CreateParameter(PN_SACIC, OracleType.Number, ParameterDirection.Output);
parameters[3] = CreateParameter(PN_SAVSF, OracleType.Number, ParameterDirection.Output);
parameters[4] = CreateParameter(PN_MTO_B, OracleType.Number, ParameterDirection.Output);
parameters[5] = CreateParameter(PN_ULT_REM, OracleType.Number, ParameterDirection.Output);
parameters[6] = CreateParameter(PN_AVG_REM, OracleType.Number, ParameterDirection.Output);
parameters[7] = CreateParameter(PN_TO_SEG, OracleType.Number, ParameterDirection.Output);
parameters[8] = CreateParameter(PN_TA_APL, OracleType.Number, ParameterDirection.Output);
parameters[9] = CreateParameter(PN_TA_D, OracleType.Number, ParameterDirection.Output);
parameters[10] = CreateParameter(PN_DEV_ULT, OracleType.Number, ParameterDirection.Output);
parameters[11] = CreateParameter(PC_TO_F_OBL, OracleType.VarChar, ParameterDirection.Output);
parameters[12] = CreateParameter(PC_TO_F_VCF, OracleType.VarChar, ParameterDirection.Output);
parameters[13] = CreateParameter(PC_TO_F_VSF, OracleType.VarChar, ParameterDirection.Output);
parameters[14] = CreateParameter(PN_RA_MIN_VIG, OracleType.Number, ParameterDirection.Output);
parameters[15] = CreateParameter(PC_PE_MIN_SPP, OracleType.VarChar, ParameterDirection.Output);
parameters[16] = CreateParameter(PC_IND_CON_RES, OracleType.VarChar, ParameterDirection.Output);
parameters[17] = CreateParameter(PC_NUM_RES, OracleType.VarChar, ParameterDirection.Output);
parameters[18] = CreateParameter(PN_VA_NO_RES, OracleType.Number, ParameterDirection.Output);
parameters[19] = CreateParameter(PC_ME, OracleType.VarChar, ParameterDirection.Output);
parameters[20] = CreateParameter(PN_GA_SEP, OracleType.Number, ParameterDirection.Output);
parameters[21] = CreateParameter(PC_TO_TRA, OracleType.VarChar, ParameterDirection.Output);
parameters[22] = CreateParameter(PC_TO_BO, OracleType.VarChar, ParameterDirection.Output);
parameters[23] = CreateParameter(PN_PSEG_NO_D_MIN, OracleType.Number, ParameterDirection.Output);
parameters[24] = CreateParameter(PN_PSEG_NO_D_AVG, OracleType.Number, ParameterDirection.Output);
parameters[25] = CreateParameter(PN_PSEG_AJU_S_MIN, OracleType.Number, ParameterDirection.Output);
parameters[26] = CreateParameter(PN_PSEG_AJU_S_AVG, OracleType.Number, ParameterDirection.Output);
parameters[27] = CreateParameter(PN_PSEG_AJU_D_MIN, OracleType.Number, ParameterDirection.Output);
parameters[28] = CreateParameter(PN_PSEG_AJU_D_AVG, OracleType.Number, ParameterDirection.Output);
parameters[29] = CreateParameter(PN_PAJU_AU_S, OracleType.Number, ParameterDirection.Output);
parameters[30] = CreateParameter(PN_PAJU_AU_D, OracleType.Number, ParameterDirection.Output);
parameters[31] = CreateParameter(PN_PRP, OracleType.Number, ParameterDirection.Output);
parameters[32] = CreateParameter(PN_PJAN, OracleType.Number, ParameterDirection.Output);
parameters[33] = CreateParameter(PN_MON_TO_CAM, OracleType.Number, ParameterDirection.Output);
parameters[34] = CreateParameter(RETURN_VALUE, OracleType.Number, ParameterDirection.ReturnValue);

所有参数名称都是之前设置的字符串。

【问题讨论】:

  • 能把设置参数的代码加进去吗?
  • Overflow error 是什么?堆栈溢出,算术运算溢出?提供有关异常的完整信息,包括堆栈跟踪和内部异常。

标签: c# .net c#-4.0 oracle10g system.data.oracleclient


【解决方案1】:

如果您可以确定哪个输出参数是问题所在,您可以尝试这个 hack。不是直接从 ADO.net 调用 SP,而是执行一条 SQL 语句,该语句包含一个调用 SP 的匿名 PL/SQL 块,并带有一个函数来修改输出参数(trunc、round 或 cast)。示例查询:

"BEGIN PROCEDURE_NAME(?,?,?,TRUNC(?),?,?); END;"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2021-07-11
    • 2016-11-11
    • 1970-01-01
    • 2013-12-12
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多