【问题标题】:EF6 stored procedure must declare scalar variableEF6 存储过程必须声明标量变量
【发布时间】:2015-09-17 11:39:11
【问题描述】:

我正在尝试使用 C# EF6 调用存储过程以带回数据。我尝试在 SQL 管理工作室中运行存储过程,它似乎工作正常,但是当我尝试在我的应用程序中运行它时,我收到一条错误消息 "Must declare the scalar variable "@devID"

这是我的应用程序中调用存储过程的方法的一部分

 public IHttpActionResult GetMetrics(int deviceID, string attribute, string startDate)
    {

        if (deviceID == 0)
        {
            return NotFound();
        }

        var metrics = db.Database.SqlQuery<Metrics>("GetMetrics @devID, @MetricType, @startTime", deviceID, attribute, startDate).ToList();

这是我的存储过程:

    ALTER PROCEDURE [dbo].[GetMetrics]
    -- Add the parameters for the stored procedure here
    @devID int,
    @MetricType nvarchar(20),
    @startTime nvarchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * 
    FROM dbMetrics
    WHERE deviceID = @devID and MetricType = @MetricType and timeStamp >= @startTime
    ORDER BY timeStamp 
END

【问题讨论】:

    标签: c# asp.net-mvc entity-framework stored-procedures


    【解决方案1】:

    根据documentation,如果你想使用命名参数,你需要像这样传递SqlParameter对象:

    var metrics = db.Database.SqlQuery<Metrics>("GetMetrics @devID, @MetricType, @startTime", 
        new SqlParameter("devID", deviceID),
        new SqlParameter("MetricType", attribute),
        new SqlParameter("startTime", startDate)
    ).ToList();
    

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多