I’m looking for a one week interval, but any thing under 6 gives me:
timeIn > DATE_SUB(NOW(), INTERVAL 1 WEEK)
Error: Invalid attempt to Read when reader is closed.
timeIn > DATE_SUB(NOW(), INTERVAL 6 WEEK) //6 or anything above 6 and the query works
Error: Invalid attempt to Read when reader is closed.
Here’s how I’m executing the query(this works, but when I change the INTERVAL from 6 to anything less I get the reader is closed error):
string sql = "SELECT rooms.building, rooms.room, " +
"users.FirstName, users.LastName, users.adUname, " +
"ingressegresslogs.timeIn, ingressegresslogs.timeOut, rooms.Id " +
"FROM rooms, users, ingressegresslogs " +
"WHERE ingressegresslogs.RoomId = rooms.Id " +
"AND ingressegresslogs.timeIn > DATE_SUB(NOW(), INTERVAL 6 WEEK) "
"AND ingressegresslogs.UserId = users.id " +
"ORDER BY rooms.Id ASC, ingressegresslogs.timeIn ASC";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
EDIT: This query works from the mysql command line for and INTERVAL 1 WEEK just not in the C# code. 428 rows with data are returned
Here is the reader code, which may be where the problem is.
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
if (!rdr.HasRows)
{
rdr.Close();
// EventLog.WriteEntry("IEReporter", "Database returned nothing", EventLogEntryType.Error, 234);
}
while (rdr.Read())
{
try
{
IELog queryResult = new IELog();
queryResult.RoomID = rdr.GetString("Id");
queryResult.FirstName = rdr.GetString("FirstName");
queryResult.LastName = rdr.GetString("LastName");
queryResult.ADUname = rdr.GetString("ADUname");
queryResult.Building = rdr.GetString("Building");
queryResult.Room = rdr.GetString("room");
queryResult.Ingresstime = rdr.GetDateTime ("timeIn");
// timeOut might be null
if (Convert.IsDBNull(rdr["timeOut"]))
{
queryResult.Egresstime = new DateTime(1111, 1, 11);
}
else
{
queryResult.Egresstime = rdr.GetDateTime("timeOut");
}
queryResultList.Add(queryResult);
}
catch (Exception ex)
{
Console.WriteLine("LogDAO build list: " + ex);
}
}
// Count rows
//Console.WriteLine("Row Count: {0}", queryResultList.Count);
rdr.Close();
return queryResultList;
Seeing the code you posted, you probably want to return immediately after you determine there are no rows.