我正在使用a SqlDataReader
而在尝试阅读读者时我正在使用行.
当我检查时.HasRows
,行不可用.
ListempTimingsList = new List (); // Creates a SQL connection using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["WINPAKContext"].ToString())) { // Creates a SQL command using (var command = new SqlCommand("SELECT * FROM SEED_VIEW WHERE empid is not null and DateTime > '" + dtlastpunch + "' order by datetime", connection)) { connection.Open(); // Loads the query results into the table var reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { EmployeeTimings empTime = new EmployeeTimings(); empTime.CardNumber = reader["CardNO"].ToString(); empTime.EMPId = reader["EMPID"].ToString(); empTime.FirstName = reader["FirstName"].ToString(); empTime.LastName = reader["LastName"].ToString(); empTime.Location = reader["Location"].ToString(); empTime.Trans_DateTime = Convert.ToDateTime(reader["DateTime"]); empTimingsList.Add(empTime); } reader.Close(); } command.ExecuteNonQuery(); } connection.Close(); } return empTimingsList;
你能告诉我这个问题吗?
reader.HasRows()
电话后发生了什么,redaer没有任何行....
没有必要只检查HasRow属性Read就足够了,如果你只使用read方法并尝试读取没有任何行的读取行而不是它只是存在的行
你可以这样写,删除hasRow就没有必要了
while (reader.Read()) { EmployeeTimings empTime = new EmployeeTimings(); empTime.CardNumber = reader["CardNO"].ToString(); empTime.EMPId = reader["EMPID"].ToString(); empTime.FirstName = reader["FirstName"].ToString(); empTime.LastName = reader["LastName"].ToString(); empTime.Location = reader["Location"].ToString(); empTime.Trans_DateTime = Convert.ToDateTime(reader["DateTime"]); empTimingsList.Add(empTime); }
避免使用SQLInjection
除此之外,您的代码将允许SQLInjection,因为您在查询中直接传递值...使用参数化查询而不是像这样的代码.
查询中的日期时间条件问题
可能存在问题,因为您在不应用任何转换的情况下比较where条件中的datetime值.如果使用参数化sql查询,将解决此问题.