首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用c#在一个方法中返回多个对象?

如何使用c#在一个方法中返回多个对象?
EN

Stack Overflow用户
提问于 2014-06-12 17:46:18
回答 8查看 462关注 0票数 0

我有一个从我的数据库中检索多个结果的方法,我想将这些结果中的每一个作为对象返回到我的页面,但目前它只是返回sql命令的最后一个结果。

我的页面上的代码调用该方法:

代码语言:javascript
运行
复制
Personen persoon1 = Personen.GetOneItem(int.Parse(TextBox_id.Text));

方法代码:

代码语言:javascript
运行
复制
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;
}

并且它只返回对象中的最后一个结果。

提前感谢

EN

回答 8

Stack Overflow用户

发布于 2014-06-12 17:49:44

基本上,您应该返回一个List<Personen>或一些类似的集合类型。(考虑将返回类型声明为IList<Personen>IEnumerable<Personen>,并使用List<Personen>作为实现类型。)

请注意,当前您正在重复覆盖单个对象的属性-您也需要修复这一点。

例如:

代码语言:javascript
运行
复制
...
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语句关闭您的连接、命令和读取器
  • 您应该使用参数化SQL而不是将参数嵌入到SQL
  • 中您应该遵循代码命名约定,例如,使用.NET而不是MenuID强制转换为int,或者使用D17int>而不是调用Personen已经是复数名词,将其更改为Person,以便它表示单个人
票数 6
EN

Stack Overflow用户

发布于 2014-06-12 17:48:11

您有多种选择:

a.返回包含要返回的特定对象的复合对象

b.用完,例如void MyMethod(out object obj1, out object obj2);

票数 0
EN

Stack Overflow用户

发布于 2014-06-12 17:49:21

你可以为你的方法返回List<Personen>。建议使用using statementcommand parameter

代码语言:javascript
运行
复制
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;
}

如何使用方法

代码语言:javascript
运行
复制
//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;
     } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24181279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档