我正在使用 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.
什么会导致这个问题?我正在传递这个参数,为什么它不接受它?
这应该有效:
_dbContext.Database.ExecuteSqlCommand("exec GetInfo @mIIN, @mXMLContent OUTPUT", iinParameter, outputParameter);
我认为问题出在你的子程序中。 日志消息表明参数已提供给
GetInfo
,错误与子过程IBRC_GetClientInfo
有关。检查你的程序里面的参数是否正确传递。
使用 EF 6 调用存储过程必须做一些事情。
SqlParameter
SqlParameter
构造函数中以字符串形式提供所有值