public List<Menu> Getmonan()
{
string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
List<Menu> menulist = new List<Menu>();
Menu menu = new Menu();
using (SqlConnection conn = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("Getmenu", conn);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
menu.Tenmon = reader["TenMon"].ToString();
menu.Loaimon = reader["LoaiMon"].ToString();
menulist.Add(menu);
}
}
return menulist;
}
我的程序和sql结果:
我的WCF测试客户端结果: 我的代码有什么问题?为什么我在menulist中得到相同的菜?
答案 0 :(得分:1)
您必须在循环中创建新菜单。
您基本上创建了一个在循环中多次更改的对象,然后将其多次添加到列表中。它产生一个列表,其中所有元素都是同一条数据。
public List<Menu> Getmonan()
{
string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
List<Menu> menulist = new List<Menu>();
using (SqlConnection conn = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("Getmenu", conn);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
Menu menu = new Menu();
menu.Tenmon = reader["TenMon"].ToString();
menu.Loaimon = reader["LoaiMon"].ToString();
menulist.Add(menu);
}
}
return menulist;
}
答案 1 :(得分:1)
您需要创建多个对象,而不是覆盖旧对象:
public List<Menu> Getmonan()
{
string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
List<Menu> menulist = new List<Menu>();
// Menu menu = new Menu(); // <--- remove this!!
using (SqlConnection conn = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("Getmenu", conn);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
Menu menu = new Menu(); // <--- put it here...
menu.Tenmon = reader["TenMon"].ToString();
menu.Loaimon = reader["LoaiMon"].ToString();
menulist.Add(menu);
}
}
return menulist;
}
答案 2 :(得分:1)
这应该有效:
public List<Menu> Getmonan()
{
string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
List<Menu> menulist = new List<Menu>();
using (SqlConnection conn = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("Getmenu", conn);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while(sdr.Read())
{
Menu menu = new Menu()
{
Tenmon = sdr.GetString(Column Index);
Loaimon = sdr.GetString(Column Index);
};
menulist.Add(menu);
}
}
}
return menulist;
}
答案 3 :(得分:0)
正如我和我所指出的那样
您需要为列表中的每个项目添加一个新菜单,否则您将更新相同的项目,但会反复将其添加到列表中,以便您最终获得相同内容的多个副本。