2015-04-22 73 views
-1

我在數據庫連接內部有一個while循環,其中我想從數據庫檢索的值中創建一個對象。 這是我使用的代碼:每個循環創建一個新對象

public void dbConnect() 
    { 
     using (SqlConnection myConnection = new SqlConnection("server=CHAYU\\SQLEXPRESS;" + 
            "Trusted_Connection=yes;" + 
            "database=restaurantApp; " + 
            "connection timeout=30")) 
     { 

      string oString = "Select * from Meal where availability=1"; 
      SqlCommand oCmd = new SqlCommand(oString, myConnection); 
      myConnection.Open(); 
      using (SqlDataReader oReader = oCmd.ExecuteReader()) 
      { 
       while (oReader.Read()) 
       { 
        Meal m = new Meal(); 
        m.mealID = Convert.ToInt32(oReader["mealId"]); 
        m.mealName = oReader["mealName"].ToString(); 
        m.quantity=Convert.ToInt32(oReader["quantity"]); 
        m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]); 
        m.availability = true; 


       } 

       myConnection.Close(); 
      } 
     } 
    } 

我想每次加載窗體調用這個代碼,以便在開始創建對象,他們可以在以後進行操作。但是,我的問題是,如何通過在while循環內部具有不同的對象引用變量來執行此操作?

+2

你的問題是不明確......但聽起來好像你應該創建一個集合... –

+1

不要使用select * PLS,只選擇你所需要的。 – EaziLuizi

+0

@Praveen絕對不是ArrayList! – dcastro

回答

4

你想每餐嗎?創建一個列表並存儲您的用餐對象,同時迭代它!

List<Meal> mList = new List<Meal>(); 
while (oReader.Read()) 
{ 
    Meal m = new Meal(); 
    m.mealID = Convert.ToInt32(oReader["mealId"]); 
    m.mealName = oReader["mealName"].ToString(); 
    m.quantity = Convert.ToInt32(oReader["quantity"]); 
    m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]); 
    m.availability = true; 
    mList.Add(m); 
} 
+0

如果我想編輯對象的屬性值,我可以這樣做後,它在列表中? – CDamsinghe

+0

是的,通過它的索引來訪問它'mList [0] .mealName =「Fish」;'或Linq'mList.Where(x => x.mealID == 10).First().method =「Chips」; ' – fubo

0

將循環中的每個創建的對象添加到列表中。默認情況下,在循環中創建的每個Meal都是一個不同的參考,但您不會將它們存儲在任何地方以便稍後操作。

0

使用該擴展方法獲取對象的名單在datareder類

public static List<T> DataReaderMapToList<T>(IDataReader dr) 
{ 
    List<T> list = new List<T>(); 
    T obj = default(T); 
    while (dr.Read()) { 
     obj = Activator.CreateInstance<T>(); 
     foreach (PropertyInfo prop in obj.GetType().GetProperties()) { 
      if (!object.Equals(dr[prop.Name], DBNull.Value)) { 
       prop.SetValue(obj, dr[prop.Name], null); 
      } 
     } 
     list.Add(obj); 
    } 
    return list; 
} 

然後使用它像這樣

List<Meal> MealList = new List<Meal>(); 
MealList = DataReaderMapToList<Meal>(reader);