我有一个从我的数据库中检索多个结果的方法,我想将这些结果中的每一个作为对象返回到我的页面,但目前它只是返回sql命令的最后一个结果。
我的页面上的代码调用该方法:
Personen persoon1 = Personen.GetOneItem(int.Parse(TextBox_id.Text));方法代码:
public static Personen GetAllPersonWithID(int id)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["RestaurantConnection"].Connection
String;
SqlCommand cmd = new SqlCommand("SELECT * FROM Personen where reservering_id=" + id, con);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
Personen Item = new Personen();
while (rdr.Read())
{
Item.id = Convert.ToInt32(rdr["id"]);
Item.menu_id = Convert.ToInt32(rdr["menu_id"]);
Item.reservering_id = Convert.ToInt32(rdr["reservering_id"]);
}
con.Close();
return Item;
}并且它只返回对象中的最后一个结果。
提前感谢
发布于 2014-06-12 17:49:44
基本上,您应该返回一个List<Personen>或一些类似的集合类型。(考虑将返回类型声明为IList<Personen>或IEnumerable<Personen>,并使用List<Personen>作为实现类型。)
请注意,当前您正在重复覆盖单个对象的属性-您也需要修复这一点。
例如:
...
List<Personen> list = new List<Personen>();
while (rdr.Read())
{
Personen item = new Personen();
item.id = Convert.ToInt32(rdr["id"]);
item.menu_id = Convert.ToInt32(rdr["menu_id"]);
item.reservering_id = Convert.ToInt32(rdr["reservering_id"]);
list.Add(item);
}
...
return list;此外:
using语句关闭您的连接、命令和读取器MenuID强制转换为int,或者使用D17int>而不是调用Personen已经是复数名词,将其更改为Person,以便它表示单个人发布于 2014-06-12 17:48:11
您有多种选择:
a.返回包含要返回的特定对象的复合对象
b.用完,例如void MyMethod(out object obj1, out object obj2);
发布于 2014-06-12 17:49:21
你可以为你的方法返回List<Personen>。建议使用using statement和command parameter。
public static List<Personen> GetAllPersonWithID(int id)
{
List<Personen> lstPersonen = new List<Personen>();
string constring = System.Configuration.ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
string sql = "SELECT * FROM Personen where reservering_id=@id";
using(SqlConnection con = new SqlConnection(constring))
{
con.Open();
using(SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@id", id);
using(SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
Personen Item = new Personen();
Item.id = Convert.ToInt32(rdr["id"]);
Item.menu_id = Convert.ToInt32(rdr["menu_id"]);
Item.reservering_id = Convert.ToInt32(rdr["reservering_id"]);
lstPersonen.Add(Item);
}
}
}
}
return lstPersonen;
}如何使用方法
//provide reservering_id here
List<Personen> lstPersonen = GetAllPersonWithID(int.Parse(TextBox_reservering_id.Text));
//find a person having id equals to value present in `TextBox_id.Text`
Personen persoon1;
foreach(Personen p in lstPersonen)
{
//p gets each item present in list
if(p.id == int.Parse(TextBox_id.Text))
{
persoon1 = p;
break;
}
}https://stackoverflow.com/questions/24181279
复制相似问题