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

C#程序服务器运行正常,客户端触发空引用异常求助

问题

我开发的C#应用在服务器上运行一切正常,但在客户端机器运行时触发空引用异常。报错信息指向代码中的第297行(即catch块内的throw语句),请问为何会出现这种服务器正常、客户端报错的情况?求排查思路。

相关代码

public void saveVote()
{
    string val = "";
    val = "'" + m_sessid + "','" +
          m_nomineeshid + "','" +
          m_votershid + "','" +
          m_nomineeid + "','" +
          m_nominee + "','" +
          m_nomineeamh + "','" +
          m_voteregcode + "','" +
          m_votershno + "','" +
          m_votershamt + "','" +
          m_crtby + "','" +
          m_crtdt + "','" +
          m_isnombynoninf + "','" +
          m_nomineeregcode + "','" +
          m_isvoterinf + "','" +
          m_isnomforbod + "','" +
          m_votercode + "'";
    try
    {
        dac.Insert("tblVotForBoDNominees", val);
    }
    catch (Exception q)
    {
        throw new Exception(q.Message + " " + 
                            q.InnerException.Message.ToString());
    }
}
// 报错信息指向上述代码中的THROW语句(第297行)
排查思路
  • 空引用的直接原因:异常来自catch块里的q.InnerException.Message.ToString()——当q.InnerException为null时,访问它的Message属性就会触发空引用异常。服务器上抛出的异常可能带有InnerException,但客户端触发的异常没有,所以客户端会报错,服务器不会。
  • 先修复throw语句的bug:先把catch块改成安全写法,避免二次异常掩盖真实问题:
    catch (Exception q)
    {
        string innerExceptionMsg = q.InnerException != null ? q.InnerException.Message : "无内部异常信息";
        throw new Exception($"{q.Message} {innerExceptionMsg}");
    }
    
    这样能拿到原始异常的真实信息,便于排查根本问题。
  • 对比服务器与客户端的环境差异:
    • 数据库连接:检查客户端的数据库连接配置是否正确,比如连接字符串是否指向正确的服务器、客户端机器是否能访问数据库、数据库账号权限是否足够。服务器可能是本地连接,客户端是远程连接,网络不通或权限不足都可能导致dac.Insert抛出异常,且这类异常可能没有InnerException。
    • 变量赋值:确认客户端运行时m_sessid、m_nomineeshid等成员变量是否都被正确赋值。服务器测试时这些变量可能都有有效值,但客户端场景下可能存在未初始化的情况,导致SQL拼接异常,进而触发dac.Insert抛出异常。
    • 依赖版本:检查客户端使用的dac数据访问组件版本是否和服务器一致。版本差异可能导致Insert方法抛出的异常结构不同,出现服务器有InnerException而客户端没有的情况。
  • 捕获原始异常:修复throw语句后,在客户端运行时捕获完整的原始异常,查看dac.Insert到底抛出了什么错误,这才是导致问题的根源。
  • 注意SQL注入风险:当前代码直接拼接字符串生成SQL,存在严重的SQL注入风险,同时如果客户端输入的内容包含单引号等特殊字符,会导致SQL语法错误,进而触发异常。建议改用参数化查询,既安全又能避免这类语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:05:36