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

C# ScheduledReport函数Excel数据为0且API调用报错

问题排查与解决方案

一、Excel表格返回数据为0的排查方向

  • 查询条件验证:检查报表生成时的SQL/LINQ查询条件,确认时间范围、筛选参数是否与预期一致。比如是否误将报表起止时间设为未来日期,或WHERE子句字段关联错误导致过滤掉所有有效数据。可直接将查询语句拿到数据库客户端执行,验证返回结果是否正确。
  • 数据导出逻辑检查:确认导出Excel的代码是否正确将查询结果写入单元格。比如是否遗漏遍历数据集的循环,或赋值时错误地将默认值0写入所有行而非实际查询数值。检查代码中类似worksheet.Cells[row, col].Value = 0;的硬编码逻辑,是否应替换为数据集中对应字段值。
  • 数据类型与空值处理:若数据库数值字段存在NULL值,代码中是否强制将其转换为0?比如使用x.NumberField ?? 0时,若业务上NULL不应转为0,需调整处理逻辑;同时检查Excel单元格格式是否设置正确,避免因格式问题导致有效数据显示为0。

二、attendanceCentrals.ForEach(...)代码行报错的解决方案

常见异常原因及修复:

  • NullReferenceException(空引用异常)
    • 情况1:attendanceCentrals为null。数据库有有效记录,但查询方法可能未处理空结果,返回null而非空集合。修复:遍历前添加空判断,或确保查询方法返回Enumerable.Empty<AttendanceCentral>()而非null。示例:
      if (attendanceCentrals != null)
      {
          attendanceCentrals.ForEach(x => attendanceNames += (x.Name ?? "").ToUpper() + " - ");
      }
      
    • 情况2:集合中存在x.Name为null的记录。即使数据库有有效记录,个别记录的Name字段可能为NULL,调用ToUpper()会触发空引用。修复:对Name字段做空值处理,用(x.Name ?? "").ToUpper()替代x.Name.ToUpper()。
  • 性能优化(可选):循环中字符串拼接会产生大量临时对象,建议改用StringBuilder提升效率,同时移除末尾多余分隔符:
    var sb = new StringBuilder();
    if (attendanceCentrals != null)
    {
        foreach (var x in attendanceCentrals)
        {
            sb.Append((x.Name ?? "").ToUpper()).Append(" - ");
        }
    }
    attendanceNames = sb.ToString().TrimEnd(' ', '-');
    

内容的提问来源于stack exchange,提问作者João Pedro Sousa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:35