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

从ASP.NET调用Oracle存储过程时遇类型转换错误求助

解决ASP.NET向Oracle存储过程传递整数数组的类型转换问题

错误原因分析

你遇到的Unable to cast object of type 'System.Int32[]' to type 'System.IConvertible'错误,核心原因是你的Oracle存储过程只接收单个Number类型的UserID参数,但你传入的是int[]数组。Oracle的默认标量参数无法直接接收数组类型,所以触发了类型转换失败的异常。

解决方案一:循环遍历数组,逐个调用存储过程

如果你的数组数据量不大,可以直接遍历数组,每次给存储过程传单个整数参数,代码修改如下:

int[] arrUID = UID.ToArray();
using (OracleConnection connection = new OracleConnection(Obj.GetOraConnectionString()))
{
    connection.Open();
    foreach (int userId in arrUID)
    {
        using (OracleCommand command = new OracleCommand("SP_ACCESS", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            // 传入单个int值,而非数组
            command.Parameters.Add("@USERID", OracleDbType.Int32).Value = userId;
            command.ExecuteNonQuery();
        }
    }
}

解决方案二:修改存储过程支持数组参数(高效批量插入)

如果数据量较大,循环调用效率太低,可以修改Oracle端支持数组类型,实现批量插入:

1. 先在Oracle中定义自定义数组类型

CREATE OR REPLACE TYPE NUM_ARRAY AS TABLE OF NUMBER;
/

2. 修改存储过程,接收数组参数并批量插入

CREATE OR REPLACE PROCEDURE SP_ACCESS (UserIDs IN NUM_ARRAY) IS
BEGIN
    -- 使用FORALL实现高效批量插入
    FORALL i IN UserIDs.FIRST..UserIDs.LAST
        INSERT INTO CHECKINOUT ("USERID") VALUES (UserIDs(i));
    COMMIT;
END;
/

3. 修改ASP.NET代码,传递数组参数

int[] arrUID = UID.ToArray();
using (OracleConnection connection = new OracleConnection(Obj.GetOraConnectionString()))
{
    connection.Open();
    using (OracleCommand command = new OracleCommand("SP_ACCESS", connection))
    {
        command.CommandType = CommandType.StoredProcedure;
        // 指定参数类型为OracleDbType.Array,关联自定义的NUM_ARRAY类型
        OracleParameter param = command.Parameters.Add("@UserIDs", OracleDbType.Array);
        param.UdtTypeName = "NUM_ARRAY"; // 这里要和Oracle中定义的类型名完全一致
        param.Value = arrUID;
        command.ExecuteNonQuery();
    }
}

注意事项

  • 方案二中,UdtTypeName必须和Oracle中创建的自定义数组类型名称完全匹配(是否区分大小写取决于你的Oracle配置,建议保持完全一致)。
  • 始终使用using语句自动释放数据库连接和命令对象,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Sam Bin Ham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:44:00