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

如何使用SqlDataReader读取SQL数组类型数据并返回double数组

C# 调用存储过程返回double数组实现方案

首先默认你的存储过程GetRequestReportToDays是按天返回统计数据,返回格式为7行1列,每行对应一天的统计数值,和你示例的dummy数组长度匹配,完整实现代码如下:

public static double[] GetRequestReportData()
{            
    // 用动态集合存储读取到的数值,避免提前预知结果长度的问题
    List<double> resultList = new List<double>();
    using (SqlDataReader dataReader = SqlManager.Instance.ExecuteReader(CommandType.StoredProcedure, "GetRequestReportToDays"))
    { 
        // 循环读取每一行数据
        while (dataReader.Read())
        {
            // 读取第一列的数值,做空值判断避免DBNull报错
            if (!dataReader.IsDBNull(0))
            {
                // 转为double类型加入集合
                resultList.Add(dataReader.GetDouble(0));
            }
            else
            {
                // 空值可以根据业务需求设置默认值,比如0
                resultList.Add(0d);
            }
        }
    }
    // 集合转数组返回
    return resultList.ToArray();
}

如果你的存储过程返回格式是1行7列,每列对应一天的统计数值,可以用下面的逻辑替换using块内的代码:

using (SqlDataReader dataReader = SqlManager.Instance.ExecuteReader(CommandType.StoredProcedure, "GetRequestReportToDays"))
{ 
    // 读取唯一的一行数据
    if (dataReader.Read())
    {
        // 循环读取每一列
        for (int i = 0; i < dataReader.FieldCount; i++)
        {
            if (!dataReader.IsDBNull(i))
            {
                resultList.Add(dataReader.GetDouble(i));
            }
            else
            {
                resultList.Add(0d);
            }
        }
    }
}

注意事项

  • 如果存储过程返回的数值列不是double类型(比如int、decimal),可以根据实际类型先读取再转double,比如Convert.ToDouble(dataReader.GetInt32(0))
  • 可以根据业务需要添加异常捕获逻辑,处理存储过程调用失败、类型转换失败的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:48:03