2013-04-24 258 views
0

我一直试图从一个存储过程从实体框架的存储过程

ALTER PROCEDURE [dbo].[sp_getrandomnumber] 
     @randoms int output 
AS 
begin 
    set @randoms =12345 
end 

得到一个简单的输出ASP.NET MVC4回报输出和我的MVC

public ActionResult Index() 
    { 
     var qry = db.sp_getrandomnumber(ref randoms); 
     ...... 
    return View(); 
    } 
} 

,但是当我编译坐上var qry段错误说下面

无重载方法“sp_getrandomnumber”需要1个参数

“随机量”并不在当前情况下事先存在

我尝试下面这个教程 http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx

千恩万谢名称 碎甲弹

+1

备注:您应该**不要**为存储过程使用'sp_'前缀。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并将其他内容用作前缀 - 或者根本没有前缀! – 2013-09-29 13:52:24

回答

1

你的问题是,你的存储过程的输出是一个整数。

请参阅以下Scott Gu的文章引用。

“LINQ to SQL将SPROC中的参数映射为参考参数(ref关键字),对于值类型,将参数声明为可为空”。

所以你需要确保你声明randoms为可空int。

您电话的SP更改

public ActionResult Index() 
{ 
    // @randoms int output from SPROC. 
    int? randoms = null; 

    // qry would contain a select if you had one in the SPROC. 
    var qry = db.sp_getrandomnumber(ref randoms); 

    // randoms is 12345 

    return View(); 
} 

找到另一个例子here

+0

抱歉,延迟响应。非常感谢山姆 – hesh 2013-04-25 08:42:30