2017-11-28 11 views
0

私はSQLデータベースからレコードを取り出し、クラスプロパティを使用して辞書に保存しています。問題は、取り出された最後の行が変更されたり、辞書内のすべての前の値が複製されたりすることです。前にリストを使ったけど、同じことが起こっている。 以下は私のコードです。asp.netの辞書の値の繰り返しc#

public Dictionary<string,Models.Attendance> NumberofDaysPresent(string userid, int month, int year, System.DateTime firstday, System.DateTime lastday) 
{ 
    firstday.ToString("yyyy/MM/dd").Trim().Replace("-", "/"); 
    lastday.ToString("yyyy/MM/dd").Trim().Replace("-", "/"); 
    SqlConnection conn; 
    conn = Database.getInstance(); 
    conn.Open(); 

    Dictionary<string,Models.Attendance> lst = new Dictionary<string,Models.Attendance>(); 
    Models.Attendance att = new Models.Attendance(); 



    string query = "Select * from dbo.[Attendence] where UserId = @uid " + 
     "AND CONVERT(VARCHAR(11),Date,111) >= @datefrom "+ 
     "AND CONVERT(VARCHAR(11),Date,111) <= @dateto Order by Date ASC"; 
    SqlCommand cmd = new SqlCommand(query, conn); 
    cmd.Parameters.AddWithValue("@uid", userid); 
    //cmd.Parameters.AddWithValue("@month", month); 
    //cmd.Parameters.AddWithValue("@year", year); 
    cmd.Parameters.AddWithValue("@datefrom", firstday); 
    cmd.Parameters.AddWithValue("@dateto", lastday); 
    reader = cmd.ExecuteReader(); 

    while(reader.Read()) 
    { 
     //if(reader["Status"].ToString() == "Full Day" || reader["Status"].ToString() == "Half Day" || reader["Status"].ToString() == "Late") 
     //{ 
      att.strId = Guid.NewGuid().ToString(); 
     att.cEmployee = new User(); 
     att.cEmployee.StrUserID = reader["UserId"].ToString(); 
      att.strStatus = reader["Status"].ToString(); 
      att.tCheckIn = (TimeSpan)reader["CheckIn"]; 
      att.tCheckOut = (TimeSpan)reader["Checkout"]; 
      att.dtAttendanceDate = Convert.ToDateTime(reader["Date"]); 
      lst.Add(att.strId,att); 
     // } 
    } 
} 
+0

なぜ辞書にデータを保存していますか?データを取得してDataTableに格納するのはなぜですか? – MethodMan

+0

これは、1日、半日、休暇などの複数のステータスを含む出席者の記録があるためです。だから、私はレコードをさらにフィルタリングするためにこれらの日々を個別に抽出する必要があります。 – user100020

答えて

1

whileループの一番上にあるこの

Models.Attendance att; 
while(reader.Read()) 
    { 
     //if(reader["Status"].ToString() == "Full Day" || reader["Status"].ToString() == "Half Day" || reader["Status"].ToString() == "Late") 
     //{ 
      att = new Models.Attendance(); 
      att.strId = Guid.NewGuid().ToString(); 
     att.cEmployee = new User(); 
     att.cEmployee.StrUserID = reader["UserId"].ToString(); 
      att.strStatus = reader["Status"].ToString(); 
      att.tCheckIn = (TimeSpan)reader["CheckIn"]; 
      att.tCheckOut = (TimeSpan)reader["Checkout"]; 
      att.dtAttendanceDate = Convert.ToDateTime(reader["Date"]); 
      lst.Add(att.strId,att); 
     // } 
    } 

にwhileループを変更してみてください。毎回新しいモデルをインスタンス化することで、この問題は発生しません。

+0

ありがとうございますSir :) – user100020

関連する問題