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

调用存储过程插入数据并返回输出参数时遇类型映射错误,求正确调用方式

问题分析与解决方法

嘿,我一眼就看到问题所在了!你遇到的报错:

No mapping exists from object type System.Collections.Generic.List`1

根源是输出参数的添加方式错误,同时调用存储过程的命令文本也漏了输出参数的声明。咱们一步步理清楚:

错误的核心原因

你先正确创建了输出参数对象outputParameter,但后续却多做了一步画蛇添足的操作:

parameters.Add(new SqlParameter("@Confirm", outputParameter));

这里你把已经配置好的outputParameter作为参数值传给了一个新的SqlParameter,这就导致EF试图把SqlParameter类型的对象映射到SQL参数,自然无法识别,抛出类型映射错误。

另外,你的存储过程调用命令里没有声明输出参数,存储过程需要接收@Confirm作为输出参数,但你只写了exec TestProc @Parameter1, @Parameter2,SQL Server不知道要处理这个输出参数。

修正后的代码

using (Entities ent = new Entities()) 
{ 
    List<SqlParameter> parameters = new List<SqlParameter>(); 
    parameters.Add(new SqlParameter("@Parameter1", "Parameter1")); 
    parameters.Add(new SqlParameter("@Parameter2", "Parameter2")); 

    // 正确创建并配置输出参数,直接添加到参数列表
    SqlParameter outputParameter = new SqlParameter(); 
    outputParameter.ParameterName = "@Confirm"; 
    outputParameter.SqlDbType = System.Data.SqlDbType.Bit; 
    outputParameter.Direction = System.Data.ParameterDirection.Output; 
    parameters.Add(outputParameter); // 直接添加,不需要再包装

    // 命令文本里要声明输出参数
    ent.Database.ExecuteSqlCommand("exec TestProc @Parameter1, @Parameter2, @Confirm output", parameters); 

    bool success = Convert.ToBoolean(outputParameter.Value); 
}

关键注意点

  • 输出参数配置完成后,直接加入参数列表即可,不要用它作为值创建新的SqlParameter
  • 调用存储过程的SQL语句中,必须给输出参数加上output关键字,告知SQL Server这是一个输出参数
  • 确保存储过程的参数顺序和你传入的参数顺序一致,或者可以用命名参数的方式(比如exec TestProc @Parameter1=@Parameter1, @Parameter2=@Parameter2, @Confirm=@Confirm output),这样更不容易出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:50:21