I'm fetching records from sql database and storing in Dictionary using class properties. The issue is that the last row fetched changes or duplicates all the previous values in dictionary. I've used list before but same thing is happening. Below is my code.
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);
// }
}
}