我目前有一个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;那是不供给的。
我不确定我是否正确使用我的代码调用存储过程?
答案 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
(即使用必需参数而不是可选参数),因此必须提供参数名称才能执行它。
参考: