You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle PLSQL存储过程独立运行正常 C#调用报参数数量或类型错误求助

问题根因排查
  • 核心原因1:Oracle .NET驱动默认按位置绑定参数,而非按参数名绑定。你C#代码中添加参数的顺序和存储过程定义的参数顺序完全不匹配:

    存储过程参数顺序:P_INDEX_PAGE → p_pageSize → P_DATE → P_MAIN_ENTITY_ID → 其余参数
    C#代码参数顺序:P_DATE → P_MAIN_ENTITY_ID → P_INDEX_PAGE → p_pageSize → 其余参数
    加入分页参数后参数位置整体错位,类型匹配失败就会报错。你注释掉分页参数时参数数量减少,碰巧类型对应上所以能正常运行。

  • 其他可能原因:
    • 分页参数传入值类型不匹配,比如传入了非整型值、空值未显式处理
    • AddOpLogParamVarChar方法添加的P_OP_LOG参数长度/方向配置错误
解决方案

方案1(推荐):开启按名称绑定

在初始化Command后添加一行配置即可,后续不用关心参数添加顺序:

Command.BindByName = true;

方案2:对齐参数添加顺序

严格按照存储过程定义的顺序添加参数:

Command.CommandText = "ABC"; // 注意存储过程名要替换为实际名称,不要用占位符
Command.CommandType = CommandType.StoredProcedure;
// 严格对齐存储过程参数顺序
Command.Parameters.Add(new OracleParameter("P_INDEX_PAGE", OracleDbType.Int32, frmRow, ParameterDirection.Input));
Command.Parameters.Add(new OracleParameter("p_pageSize", OracleDbType.Int32, model.toRow, ParameterDirection.Input));
Command.Parameters.Add(new OracleParameter("P_DATE", OracleDbType.Date, model.END_DATE, ParameterDirection.Input));
Command.Parameters.Add(new OracleParameter("P_MAIN_ENTITY_ID", OracleDbType.Int64, model.MainEntityID, ParameterDirection.Input));
Command.Parameters.Add(new OracleParameter("P_ENTITY_ID", OracleDbType.Int32, model.EntityID, ParameterDirection.Input));
Command.Parameters.Add(new OracleParameter("P_PARAMETERS_JSON", OracleDbType.Varchar2, getJsonString(Command), ParameterDirection.Input));
Command.Parameters.AddOpLogParamVarChar(opLog.ToString()); // 确认该方法添加的参数名是P_OP_LOG、方向为IN OUT、长度足够
Command.Parameters.Add(new OracleParameter("P_TRANS_LIST_C", OracleDbType.RefCursor, ParameterDirection.Output));

额外检查项

  • 确认frmRow、model.toRow为合法Int32类型,若为可空类型,空值要传DBNull.Value而非null
  • 确认ENTITY.ENTITY_ID字段类型,如果是NUMBER(10)及以上,P_ENTITY_ID的类型要统一改为OracleDbType.Int64避免溢出
  • 确认P_OP_LOG参数指定了足够的长度,IN OUT类型的VARCHAR2参数如果不指定长度会触发截断报错

内容的提问来源于stack exchange,提问作者user3756214

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:15:03