必须使用 dbcontext.Database.SqlQuery 声明标量变量“@custid”?

Posted

技术标签:

【中文标题】必须使用 dbcontext.Database.SqlQuery 声明标量变量“@custid”?【英文标题】:must declare the scalar variable '@custid' using dbcontext.Database.SqlQuery? 【发布时间】:2013-12-21 13:43:31 【问题描述】:

我正在尝试使用 EF5 从 bcontext.Database.SqlQuery 执行存储过程。

它抛出一个错误must declare the scalar variable '@custid'

  var results = _MiscContext.Database.SqlQuery<int>(
              "exec sp_GetStaff @custid",
              customerNumber).ToList<int>();

如果 customerNumber 是员工,SP 返回 1,否则返回 empty 行。

ALTER PROCEDURE [dbo].[sp_GetStaff]
    @custid varchar(12)
AS
BEGIN

    SET NOCOUNT ON;
SELECT 
1 AS [C1]
FROM  [dbo].[Staff] with (nolock)
WHERE [CUSTOMER_ID] = @custid


END

如何管理?

【问题讨论】:

***.com/questions/4873607/… 【参考方案1】:

由于您使用的是命名参数,因此您必须为要传递的参数指定匹配的名称。

var results = _MiscContext.Database.SqlQuery<int>(
    "exec sp_GetStaff @custid",
    new SqlParameter("custid", customerNumber)).ToList<int>();

【讨论】:

【参考方案2】:

试试

var results = _MiscContext.Database.SqlQuery<int>(
              "exec sp_GetStaff 0",
              customerNumber).ToList();

【讨论】:

这会失去参数化查询的性能和安全优势。

以上是关于必须使用 dbcontext.Database.SqlQuery 声明标量变量“@custid”?的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云消息传递必须使用 gmail 帐户吗

为啥我必须使用 .self 来快速引用类型对象?

为啥必须将 SetWindowsHookEx 与 Windows 消息队列一起使用

为啥我必须使用 WCF 而不是 Web 服务? [复制]

如果我使用 jQuery 验证,是不是必须使用 DataAnnotations?

我是不是必须使用库来操作 XML?