2013-02-27 116 views
0

我正在使用ExecuteReaderMicrosoft.Practices.EnterprizeLibrary从数据库中获取数据。我创建的存储过程返回两条记录,但ExecuteReader给我一条记录。我很困惑它为什么会发生。我正在使用以下代码行。ExecuteReader不返回存储过程返回的所有记录

public List<Products> GetProductsData(Products p) 
    { 

     List<Products> productList = new List<Products>(); 
     using (IDataReader rdr = dbt.ExecuteReader("pGetProducts",p.productType)) 
     while (rdr.Read()) 
      { 
       Products obj= new Products(); 
       { 
        obj.Id = Common.CheckIntegerNull(rdr["id"]); 
        obj.AId = Common.CheckIntegerNull(rdr["aid"]); 
        obj.Name = Common.CheckStringNull(rdr["name"]); 
        obj.Price = Common.CheckDecimalNull(rdr["amt"]); 

       } 
       productList.Add(obj); 
      } 
     return productList; 
    } 

感谢

+5

请粘贴代码为** **的文字,而不是作为一个形象.. – 2013-02-27 08:01:53

+0

请张贴的SP为好。 – 2013-02-27 08:26:07

回答

2

消耗所有的结果集,你需要调用NextResult(),直到它返回false执行的。

public List<Products> GetProductsData(Products p) 
{ 

    List<Products> productList = new List<Products>(); 
    using (IDataReader rdr = dbt.ExecuteReader("pGetProducts",p.productType)) 
    { 
     do 
     { 
      while (rdr.Read()) 
      { 
      Products obj= new Products(); 
      { 
       obj.Id = Common.CheckIntegerNull(rdr["id"]); 
       obj.AId = Common.CheckIntegerNull(rdr["aid"]); 
       obj.Name = Common.CheckStringNull(rdr["name"]); 
       obj.Price = Common.CheckDecimalNull(rdr["amt"]); 

      } 
      productList.Add(obj); 
      } 
     } while (rdr.NextResult()); 
     return productList; 
    } 
} 
+2

不知道我是否应该添加更正的代码的图片... – 2013-02-27 08:04:43

+1

不需要创造一个新的图片;只是使用Photoshop的问题:) – GolfWolf 2013-02-27 08:05:37

+0

@ W0lf:你知道,我浪费*这*接近做它,但当然使用GIMP;) – 2013-02-27 08:06:40