ASP.NET MVC使用未提供的错误参数调用存储过程

时间:2018-05-22 02:05:03

标签: c# asp.net stored-procedures

我目前有一个ASP.NET MVC应用程序试图执行存储过程。

我的存储过程是这样的:

ALTER PROCEDURE [dbo].[_SelectFromQry] 
    @queryname NVARCHAR(255)
AS
BEGIN
    SELECT TBLNAME, TBLCOL, TBLCOLLABEL, POSITION
    FROM QRY
    WHERE QUERYNAME = @queryname
END

在我的控制器中,我编写了这样的代码:

var result =  db.Database.SqlQuery<RESULT_FROM_QRY>("_SelectFromQry", new   SqlParameter("queryname","INVAVAIL")).ToList(); 

当应用程序到达此行时,我得到了

  

SqlCilent.SqlExcepction:procedure&#39; _SelectFromQry&#39;期望参数&#39; @ queryname&#39;那是不供给的。

我不确定我是否正确使用我的代码调用存储过程?

2 个答案:

答案 0 :(得分:2)

据推测,问题是你在SqlParameter构造函数中使用“queryname”而不是“@queryname”,即:

new SqlParameter("queryname","INVAVAIL")

应该是这样的:

new SqlParameter("@queryname","INVAVAIL")

答案 1 :(得分:1)

可能需要在查询字符串中包含可能的参数名称,如下所示:

var result = db.Database.SqlQuery<RESULT_FROM_QRY>("_SelectFromQry @queryname", 
             new SqlParameter("queryname", "INVAVAIL")).ToList();

或者可选择使用EXEC前缀:

var result = db.Database.SqlQuery<RESULT_FROM_QRY>("EXEC _SelectFromQry @queryname", 
             new SqlParameter("queryname", "INVAVAIL")).ToList();

由于存储过程声明了输入参数而未指定默认值NULL(即使用必需参数而不是可选参数),因此必须提供参数名称才能执行它。

参考:

SQL Server stored procedure parameters