2015-09-17 4 views
3

Я пытаюсь вызвать хранимую процедуру с использованием C# EF6 для возврата данных. Я попытался запустить хранимую процедуру в студии управления SQL и, похоже, работает нормально, однако, когда я пытаюсь запустить ее в своем приложении, я получаю сообщение об ошибке "Must declare the scalar variable "@devID"Хранимая процедура EF6 должна объявлять скалярную переменную

Вот часть моего метода в моем приложении, хранимая процедура

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 

ответ

5

согласно 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(); 
Смежные вопросы