尝试从我的C#代码运行存储过程时出错

时间:2014-06-18 06:44:32

标签: c# asp.net sql-server entity-framework

我有以下存储过程:

CREATE PROCEDURE ListQuestionIds
    @ExamId int
AS
BEGIN

    SELECT Question.QuestionUId
    FROM Objective
    INNER JOIN ObjectiveDetail
        ON ( Objective.objectiveId = ObjectiveDetail.objectiveId )
    INNER JOIN ObjectiveTopic
        ON ( ObjectiveDetail.ObjectiveDetailId = ObjectiveTopic.ObjectiveDetailId )
    INNER JOIN Problem
        ON ( ObjectiveTopic.SubTopicId = Problem.SubTopicId )
    INNER JOIN Question
        ON ( Problem.ProblemId = Question.ProblemId )
    WHERE Objective.examId = @ExamId;

END;

我正在使用EF6.1,我有一个db上下文。以下是我尝试调用存储过程的方法:

var b = db.Database.SqlQuery<string>("dbo.ListQuestionIds", 1);

它给了我一个错误,说它需要参数@ExamId但没有提供。

有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:2)

这可以解决你的问题

 db.Database.SqlQuery<string>("dbo.ListQuestionIds @ExamId", 
new SqlParameter { ParameterName = "ExamId", Value = 1 });

答案 1 :(得分:0)

你必须使用

SqlParameter param = new SqlParameter("@ExamId", 1);
db.Database.ExecuteSqlCommand("dbo.ListQuestionIds",param);

或者您也可以使用

db.Database.SqlQuery<string>("exec dbo.ListQuestionIds @ExamId",1);