【问题标题】:Repeated values in list in while(reader.Read()) {}while(reader.Read()) {} 中列表中的重复值
【发布时间】:2016-07-17 02:13:56
【问题描述】:
[WebMethod]
public List<reports> getMyReports( int user_id )
{
    string cs = ConfigurationManager.ConnectionStrings["ReportDB"].ConnectionString;
    using (SqlConnection con = new SqlConnection(cs))
    {
        SqlCommand cmd = new SqlCommand("getAllReportsByUserID", con);
        cmd.CommandType = CommandType.StoredProcedure;
        List<reports> repers = new List<reports>();
        //users[][] liser = new users[][];
        SqlParameter user_id_parameter = new SqlParameter("@user_id", user_id);
        cmd.Parameters.Add(user_id_parameter);
        reports report = new reports();
        con.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            report.id = Convert.ToInt32(reader["id"]);
            report.title = reader["title"].ToString();
            report.description = reader["description"].ToString();
            report.anonymous = (bool)reader["anonymous"];
            report.location = reader["location"].ToString();
            report.status = reader["status"].ToString();
            report.category = reader["category"].ToString();
            report.date = (DateTime)reader["date"];
            report.picture_url = reader["picture_url"].ToString();
            report.admin_id = Convert.ToInt32(reader["admin_id"]);
            repers.Add(report);
        }
        return repers;
    }
}

我有调用以下存储过程的顶级函数:

CREATE Proc [dbo].[getAllReportsByUserID]
@user_id int
as
Begin
  Select 
    id, 
    title, 
    description, 
    anonymous, 
    location, 
    status, 
    category, 
    date, 
    picture_url, 
    admin_id 
  from reports 
  where user_id = @user_id
End

我已经单独测试了该程序,它工作正常。然而,当我测试上面创建的 WebService 时,我得到一个列表,其中最后一个值在整个列表中重复。

有人可以帮我弄清楚为什么我会一遍又一遍地重复相同的(最后一个)值吗?

【问题讨论】:

  • 如果您为阅读器的每次阅读创建一个新报告,它会改变行为吗?

标签: c# asp.net list reader


【解决方案1】:

通过在循环之前创建报表对象并重复使用它,您可以在列表中多次插入对同一对象的引用。

您应该在循环中创建报告对象:

        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            reports report = new reports();
            report.id = Convert.ToInt32(reader["id"]);
            report.title = reader["title"].ToString();
            report.description = reader["description"].ToString();
            report.anonymous = (bool)reader["anonymous"];
            report.location = reader["location"].ToString();
            report.status = reader["status"].ToString();
            report.category = reader["category"].ToString();
            report.date = (DateTime)reader["date"];
            report.picture_url = reader["picture_url"].ToString();
            report.admin_id = Convert.ToInt32(reader["admin_id"]);
            repers.Add(report);
        }
        return repers;

【讨论】:

  • 耶!谢谢@ConnorsFan! :D 我会尽快接受你的回答 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 2018-04-22
相关资源
最近更新 更多