2013-02-27 170 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