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

如何将C#列表绑定到Oracle存储过程的列表参数?

C# ADO.NET 传入字符串列表到Oracle存储过程报错解决

我尝试用C#结合ADO.NET,将字符串列表作为参数传入Oracle存储过程的自定义字符串列表类型参数,但触发了参数类型/数量不匹配的错误,以下是相关代码及报错信息:

模型类

public class PieceList
{
    public List<string> p_PieceIdList { get; set; };
}

AJAX前端代码

var p_PieceIdList = ["123456AA"];
var p_producttype = null;
// 其他参数省略

var veri = {
    p_PieceIdList: p_PieceIdList,
    p_producttype: p_producttype,
    // 其他参数省略
};
$.ajax({
    type: "POST",
    url: "/Test/TestList",
    data: veri,
    success: function (data) {
        // 成功回调逻辑
    }
});

C#后端代码

public JsonResult TestList(PieceList pieceList)
{
    // 数据库连接及Command初始化省略
    command.Parameters.Add("p_PieceIdList", OracleDbType.Array).Value = new string[] { "23480465GA" };
    command.Parameters.Add("p_producttype", OracleDbType.Varchar2).Value = pieceList.p_producttype;
    command.Parameters.Add("p_outcursor", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

    command.ExecuteNonQuery();
    // 后续逻辑省略
}

Oracle存储过程参数定义

p_PieceIdList    IN T_STRING_LIST,
p_producttype    IN VARCHAR2,
-- 其他参数省略
p_outcursor      OUT SYS_REFCURSOR

报错信息

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'PIECE_LIST'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


解决步骤

  1. 指定Oracle自定义数组类型名称
    使用OracleDbType.Array时,必须明确指定Oracle端定义的数组类型名称,否则ADO.NET无法匹配到T_STRING_LIST。修改参数添加逻辑:

    var arrayParam = new OracleParameter("p_PieceIdList", OracleDbType.Array);
    arrayParam.Value = pieceList.p_PieceIdList?.ToArray() ?? Array.Empty<string>();
    arrayParam.UdtTypeName = "T_STRING_LIST"; // 关键:指定Oracle自定义类型名
    command.Parameters.Add(arrayParam);
    
  2. 验证Oracle自定义类型定义
    确保T_STRING_LIST在Oracle中定义正确,例如:

    CREATE OR REPLACE TYPE T_STRING_LIST AS TABLE OF VARCHAR2(50);
    

    若为嵌套表类型,需确认存储过程中使用的类型与定义一致。

  3. 正确传递前端参数
    后端代码中不要硬编码数组值,直接使用前端传入的pieceList.p_PieceIdList转换为数组即可。

  4. 核对参数数量与顺序
    确保Command中添加的参数数量、顺序与存储过程定义完全匹配,无遗漏或多余参数。

内容的提问来源于stack exchange,提问作者Osman TÜRK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:33:17