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

本地正常但客户端报IDataRecord列未找到错误的原因及解决方法

问题分析与修复方案

问题原因

  1. 存储过程版本不一致:本地环境的存储过程已被修改,会输出包含Code字段的结果集;但客户端数据库的存储过程仍是旧版本,仅通过RETURN返回整数,未生成对应ReturnEntity的结果集,导致ORM映射时找不到code列。
  2. 返回逻辑与代码接收不匹配:代码用IEnumerable<ReturnEntity>接收数据,但存储过程仅通过RETURN返回整数(这是存储过程的返回值,而非结果集)。本地可能因为存储过程额外输出了结果集才巧合正常,客户端环境中存储过程仅返回整数,ORM无法将整数映射到带Code、Message的实体类,触发字段缺失错误。
  3. ORM映射规则差异:本地环境的ORM(如Dapper、EF)可能配置了宽松的映射规则(允许缺失字段),而客户端环境的映射规则更严格,要求结果集必须包含实体类的所有字段。

修复方案

方案1:修正存储过程的返回逻辑

如果需要返回Code和Message,应通过SELECT输出结果集,而非仅用RETURN返回整数。示例存储过程修改如下:

CREATE PROCEDURE UploadCount
    @Xml XML
AS
BEGIN
    -- 原有业务逻辑处理
    DECLARE @Code INT = 0;
    DECLARE @Message NVARCHAR(255) = '操作完成';

    -- 输出对应ReturnEntity的结果集
    SELECT @Code AS Code, @Message AS Message;
END

方案2:修正代码的接收逻辑

如果存储过程只需返回整数状态码,调整代码接收逻辑,直接获取存储过程的返回值:

// 修改sampleProvider.UploadCount的返回类型为Task<int>
int returnCode = await sampleProvider.UploadCount(Xml);
ReturnModel returnModel = new ReturnModel(returnCode, returnCode == 0 ? "操作成功" : "操作失败");
return returnModel.message;

方案3:同步环境配置

  • 确保客户端数据库的存储过程版本与本地完全一致,包括返回的结果集结构。
  • 若Code字段为可选,配置ORM允许字段缺失时赋值默认值。比如Dapper中用[Ignore]标记非必填字段,EF中配置HasDefaultValue()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:20:18