2016-03-29 20 views
1
[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; 
    } 
} 

Iは、次のストアドプロシージャ呼び出しトップ機能があります。私は、個別の手順をテストして、それが正常に動作繰り返される値(reader.Read()){}

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をテストすると、リスト全体に渡って最後の値が重複したリストが取得されます。

誰かが同じ(最後の)値を何度も何度も何度も何度も何度も繰り返すのはなぜですか?

+2

それが動作を変更していますか? – BugFinder

答えて

6

ループの前にレポートオブジェクトを作成し、それを繰り返し再利用することにより、その同じオブジェクトへの参照を複数回リストに挿入します。

あなたのループ内のレポートオブジェクトを作成する必要があります:あなたがリーダーから読み取るごとに新しいレポートを作成した場合

 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; 
+0

Yaaaas!ありがとう@ConnorsFan! :D私はすぐにあなたの答えを受け入れるよ:D –

+0

あなたは大歓迎です! – ConnorsFan

関連する問題