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

如何将数组作为参数传入存储过程?C#参数传递问题

解决C#调用PostgreSQL存储过程传递数组参数的问题

针对你遇到的PostgreSQL存储过程数组参数传递失败问题,以下是具体的解决方法:

核心原因

直接使用DbType.Int64传递数组无法被PostgreSQL识别,需要借助**Npgsql(PostgreSQL官方.NET数据提供者)**的原生数组支持来处理。

正确实现步骤

  1. 确保项目引用Npgsql
    若未安装,通过NuGet安装:Install-Package Npgsql

  2. 修改参数添加逻辑
    替换原有参数添加代码,改用Npgsql提供的类型标识指定数组参数:

    // 假设parameters是NpgsqlParameterCollection类型
    parameters.Add(new NpgsqlParameter("p_transactionids", NpgsqlDbType.Bigint | NpgsqlDbType.Array)
    {
        Value = entity.p_transactionids ?? Array.Empty<long>() // 避免传入null引发异常
    });
    

    也可以用更简洁的写法:

    parameters.AddWithValue("p_transactionids", NpgsqlDbType.Bigint | NpgsqlDbType.Array, entity.p_transactionids);
    
  3. 验证参数类型匹配
    确认存储过程中p_transactionids的参数类型是bigint[](对应C#的long[]);若存储过程定义的是integer[],则C#中需改用int[]类型,否则会出现类型不匹配错误。

完整调用示例参考

using (var conn = new NpgsqlConnection("你的PostgreSQL连接字符串"))
{
    conn.Open();
    using (var cmd = new NpgsqlCommand("SELECT * FROM \"transaction\".stp_txn_gettxndetails(@p1, @p2, @p3, @p4, @p5, @p_transactionids, @p6, @p7, @p8, @p9, @p10)", conn))
    {
        // 添加常规参数
        cmd.Parameters.AddWithValue("p1", 0);
        cmd.Parameters.AddWithValue("p2", 0);
        cmd.Parameters.AddWithValue("p3", 3);
        cmd.Parameters.AddWithValue("p4", DateTime.Parse("2005-03-01"));
        cmd.Parameters.AddWithValue("p5", DateTime.Parse("2023-03-28"));
        
        // 添加数组参数
        cmd.Parameters.Add(new NpgsqlParameter("p_transactionids", NpgsqlDbType.Bigint | NpgsqlDbType.Array)
        {
            Value = entity.p_transactionids
        });
        
        cmd.Parameters.AddWithValue("p6", 0);
        cmd.Parameters.AddWithValue("p7", 0);
        cmd.Parameters.AddWithValue("p8", 0);
        cmd.Parameters.AddWithValue("p9", "0");
        cmd.Parameters.AddWithValue("p10", 0);

        // 执行并处理结果
        using (var reader = cmd.ExecuteReader())
        {
            // 读取数据逻辑
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:22:32