EF6 存储过程不接受参数

问题描述 投票:0回答:3

我正在使用 EF6,我需要执行存储过程。它需要两个参数:

  • mIIN varchar(12)
    ,输入字符串
  • mXMLOutput varchar(max)
    ,这是执行的结果

当我从 Management Studio 调用它时,它工作正常。

但是,当我使用以下代码时:

var iinParameter = new SqlParameter("@mIIN", SqlDbType.VarChar, 12) { Value = "123456123456" };
var outputParameter = new SqlParameter("@mXMLContent", SqlDbType.VarChar, -1) { Direction = ParameterDirection.Output };
_dbContext.Database.ExecuteSqlCommand("GetInfo", iinParameter, outputParameter);

这会导致错误

过程或函数“GetInfo”需要参数“@mIIN”,但未提供该参数

EF6 包含以下消息:

Started transaction at 15.12.2015 14:27:27 +06:00  
GetInfo  
-- @mIIN: '123456123456' (Type = AnsiString, IsNullable = false, Size = 12)   
-- @mXMLContent: '' (Type = AnsiString, Direction = Output, IsNullable = false, Size = -1)  
-- Executing at 15.12.2015 14:27:27 +06:00  
-- Failed in 2 ms with error: Procedure or function 'GetInfo' expects parameter '@mIIN', which was not supplied.

什么会导致这个问题?我正在传递这个参数,为什么它不接受它?

c# sql stored-procedures entity-framework-6
3个回答
2
投票

这应该有效:

_dbContext.Database.ExecuteSqlCommand("exec GetInfo @mIIN, @mXMLContent OUTPUT", iinParameter, outputParameter);

0
投票

我认为问题出在你的子程序中。 日志消息表明参数已提供给

GetInfo
,错误与子过程
IBRC_GetClientInfo
有关。检查你的程序里面的参数是否正确传递。


0
投票

使用 EF 6 调用存储过程必须做一些事情。

  1. 提供所有参数,包括可选参数
  2. 将参数值定义为
    SqlParameter
  3. SqlParameter
    构造函数中以字符串形式提供所有值
© www.soinside.com 2019 - 2024. All rights reserved.