如何使用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
相关产品推荐
相关产品推荐

