2017-08-03 55 views
0

我有一个存储过程,它有2个输入参数并返回多个结果集合。为什么调用带参数的SP在实体框架中返回多个结果集会抛出错误

ALTER PROCEDURE [dbo].[sp_GetList] 
    @eid int, 
    @sid int, 

    AS 

SELECT ID, NAME FROM EMPLOYEE WHERE [email protected]; 

SELECT ID, NAME FROM STUDENTS WHERE [email protected] 

在实体框架中,我打电话给这个存储过程如下。

我正在使用本教程从msdn。

https://msdn.microsoft.com/en-us/library/jj691402(v=vs.113).aspx

using (var db = new APIContext()) { 

       db.Database.Initialize(force: false); 
       var cmd = db.Database.Connection.CreateCommand(); 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.CommandText = "[dbo].[sp_GetList]"; 

       DbParameter eid = cmd.CreateParameter(); 
       eid.ParameterName = "@eid"; 
       eid.DbType = System.Data.DbType.Int32; 
       eid.Direction = ParameterDirection.Input; 
       eid.Value = resourceID; 

       DbParameter sid = cmd.CreateParameter(); 
       sid.ParameterName = "@sid"; 
       sid.DbType = System.Data.DbType.Date; 
       sid.Direction = ParameterDirection.Input; 
       sid.Value = sid; 
       cmd.Parameters.Add(sid); 

       try 
       { 
        db.Database.Connection.Open(); 
        var reader = cmd.ExecuteReader(); 

        EmpList = ((IObjectContextAdapter)db) 
         .ObjectContext 
         .Translate<Shared.Model.EmpList>(reader).ToList(); 

        MList.EmpList = EmpList; 


        reader.NextResult(); 
        SList = ((IObjectContextAdapter)db) 
         .ObjectContext 
         .Translate<Shared.Model.SList>(reader).ToList(); 

        MList.SList = SList; 


       } 
       finally 
       { 
        db.Database.Connection.Close(); 
       } 

当我运行这段代码,我得到错误:

Additional information: Procedure or function 'sp_GetList' expects parameter '@eid', which was not supplied. 

我明白这是很基本的错误,当谈到ado.net,但这种使用实体是不同的框架。

任何帮助是apreciated。

+0

@sid被声明为“日期”,并作为一个int后来在DB –

回答

3

您的代码似乎缺少:

cmd.Parameters.Add(eid); 
+0

我无法相信,我做了这个愚蠢的错误。谢谢你指出。 –

相关问题