c# - 检索 Entity Framework 中的存储过程输出参数始终为空

标签 c# entity-framework stored-procedures entity-framework-4 output-parameter

C#代码

public List<searchProducts_Result> GetProducts()
{
            var nameParam = new ObjectParameter("numbers", typeof(int));
            List<searchProducts_Result> listobjs = new List<searchProducts_Result>();
            ObjectResult<searchProducts_Result> objResult = null;
            searchProducts_Result outParam = new searchProducts_Result();
            using (var db = new SPWebEntities())
            {
                objResult = db.searchProducts("asd", 2, 5, "15", nameParam);
                if (nameParam.Value != null)
                    outParam.UserID = nameParam.Value.ToString();
                else
                    outParam.UserID = "0";
               listobjs.Add(outParam);
                foreach (searchProducts_Result sr in objResult)
                {
                    listobjs.Add(sr);
                }
            }

            return listobjs;
}

我的存储过程:

[searchProducts]
    @productName varchar(50),
    @pageStart int=2,
    @pageEnd int=4,
    @result varchar(MAX),
    @numbers int output
as
   select @numbers = COUNT(*)  
   from products 
   where productName like @productName 

   select *
   from (select 
            *,
            ROW_NUMBER() over (order by ID) as row 
         from products 
         where productName like @productName) a 
   where a.row between @pageStart and @pageEnd

nameParam.Value 总是返回空值

当我在 SQL Server Mgmt Studio 中执行存储过程时,它似乎有一个值,但在 C# 中它始终为 null

最佳答案

您必须枚举结果才能实际执行存储过程。试试这个:

public List<searchProducts_Result> GetProducts()
{
   var nameParam = new ObjectParameter("numbers", typeof(int));
   List<searchProducts_Result> listobjs = new List<searchProducts_Result>();

   // List<searchProducts_Result> objResult = null;

   searchProducts_Result outParam = new searchProducts_Result();
   using (var db = new SPWebEntities())
   {
      // by calling ToList() you execute the SP
      List<searchProducts_Result> objResult =
          db.searchProducts("asd", 2, 5, "15", nameParam).ToList();

      if (nameParam.Value != null)
         outParam.UserID = nameParam.Value.ToString();
      else
         outParam.UserID = "0";
      listobjs.Add(outParam);

      foreach (searchProducts_Result sr in objResult)
      {
         listobjs.Add(sr);
      }
   }

   return listobjs;
}

关于c# - 检索 Entity Framework 中的存储过程输出参数始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469295/

相关文章:

c# - 带有自定义参数的事件处理程序

c# - ASP.Net WebAPI JSON 响应不序列化实体关系

c# - 根据行号删除多行

php - 如何在 codeigniter 代码中使用两个或多个存储过程?

mysql - ORA-02070 : database [MySQL] does not support subqueries in this context. - 甲骨文

c# - 未在 api 请求上调用中间件类

c# - 使用委托(delegate)作为参数

c# - nservicebus 严重错误异常代码 : 0x80131623

c# - LINQ 查询无法评估 StartsWith 中的 GET 参数

entity-framework - 从 Kendo Grid 执行 Web API 补丁操作时无法正确序列化导航属性