C# 获取列表<;对象>;来自sql public List Getmonan() { 字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString; 列表菜单列表=新列表(); 菜单=新菜单(); 使用(SqlConnection conn=newsqlconnection(cs)) { SqlCommand cmd=新的SqlCommand(“Getmenu”,conn); cmd.CommandType=CommandType.storedProcess; conn.Open(); SqlDataReader=cmd.ExecuteReader(); while(reader.Read()) { menu.Tenmon=reader[“Tenmon”].ToString(); menu.Loaimon=reader[“Loaimon”].ToString(); 菜单列表。添加(菜单); } } 返回菜单列表; }
我的过程和sql结果: 我的WCF测试客户端结果:C# 获取列表<;对象>;来自sql public List Getmonan() { 字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString; 列表菜单列表=新列表(); 菜单=新菜单(); 使用(SqlConnection conn=newsqlconnection(cs)) { SqlCommand cmd=新的SqlCommand(“Getmenu”,conn); cmd.CommandType=CommandType.storedProcess; conn.Open(); SqlDataReader=cmd.ExecuteReader(); while(reader.Read()) { menu.Tenmon=reader[“Tenmon”].ToString(); menu.Loaimon=reader[“Loaimon”].ToString(); 菜单列表。添加(菜单); } } 返回菜单列表; },c#,sql-server,wcf,C#,Sql Server,Wcf,我的过程和sql结果: 我的WCF测试客户端结果: 我的代码怎么了?为什么我在菜单列表中得到相同的菜?您必须在循环中创建新菜单 您基本上是创建一个对象,在循环中更改几次,然后将其添加到列表中。它将生成一个列表,其中所有元素都是同一数据段 public List<Menu> Getmonan() { string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].Connec
我的代码怎么了?为什么我在菜单列表中得到相同的菜?您必须在循环中创建新菜单 您基本上是创建一个对象,在循环中更改几次,然后将其添加到列表中。它将生成一个列表,其中所有元素都是同一数据段
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;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
SqlDataReader=cmd.ExecuteReader();
while(reader.Read())
{
菜单=新菜单();
menu.Tenmon=reader[“Tenmon”].ToString();
menu.Loaimon=reader[“Loaimon”].ToString();
菜单列表。添加(菜单);
}
}
返回菜单列表;
}
您必须在循环中创建新菜单
您基本上是创建一个对象,在循环中更改几次,然后将其添加到列表中。它将生成一个列表,其中所有元素都是同一数据段
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;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
SqlDataReader=cmd.ExecuteReader();
while(reader.Read())
{
菜单=新菜单();
menu.Tenmon=reader[“Tenmon”].ToString();
menu.Loaimon=reader[“Loaimon”].ToString();
菜单列表。添加(菜单);
}
}
返回菜单列表;
}
正如我和大家所指出的
列表中的每一项都需要一个新菜单,否则您将更新同一项,但会重复将其添加到列表中,这样您就可以得到同一项的多个副本。正如我和各位所指出的那样
列表中的每个项目都需要一个新菜单,否则您将更新同一项目,但会重复将其添加到列表中,这样您就可以得到同一项目的多个副本。您需要创建多个对象,而不是覆盖旧对象:
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;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
//Menu Menu=new Menu();//您需要创建多个对象,而不是覆盖旧对象:
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;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
//Menu Menu=new Menu();//这应该可以:
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;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
使用(SqlDataReader sdr=cmd.ExecuteReader())
{
while(sdr.Read())
{
菜单菜单=新菜单()
{
Tenmon=sdr.GetString(列索引);
Loaimon=sdr.GetString(列索引);
};
菜单列表。添加(菜单);
}
}
}
返回菜单列表;
}
这应该可以:
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;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
使用(SqlDataReader sdr=cmd.ExecuteReader())
{
while(sdr.Read())
{
菜单菜单=新菜单()
{
Tenmon=sdr.GetString(列索引);
Loaimon=sdr.GetString(列索引);
};
菜单列表。添加(菜单);
}
}
}
返回菜单列表;
}
每次读取循环中的新行时,您都需要创建一个新菜单,而您需要不断为同一菜单项的属性赋值,然后重复将该项添加到列表中。请执行类似操作:while(reader.read()){menulist.add(新菜单{Tenmon=reader[“Tenmon”].ToString(),Loaimon=reader[“Loaimon”].ToString())};}
@BugFinder-thk它起作用了每次读取循环中的新行时,您都需要创建一个新菜单,同时继续为属性赋值