【问题标题】:EF6 Stored Procedure does not accept parametersEF6 存储过程不接受参数
【发布时间】:2015-12-15 08:40:52
【问题描述】:

我正在使用 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


    【解决方案1】:

    这应该可行:

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

    【讨论】:

    • 不错的一个。它确实有效,即使一开始没有exec。为什么我应该以这种方式指定参数?它不会将这些参数本身传递给存储过程吗?
    • 遗憾的是没有。它需要将 SqlParameter 中的参数名称与命令文本中的参数名称结合起来。
    【解决方案2】:

    我认为问题出在您的子程序中。 日志消息表明参数已提供给GetInfo,错误与子过程IBRC_GetClientInfo 有关。检查你的程序里面的参数是否正确传递。

    【讨论】:

    • 哦,很抱歉让您感到困惑...我刚刚复制了另一个通话记录。我已经更新了我的答案。
    猜你喜欢
    • 2019-01-20
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多