SqlDataReader的问题

AJA*_*ATI 0 c# sql-server sqldatareader sql-server-2008

我正在使用a SqlDataReader而在尝试阅读读者时我正在使用行.

当我检查时.HasRows,行不可用.

List<EmployeeTimings> empTimingsList = new List<EmployeeTimings>();

// 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;
Run Code Online (Sandbox Code Playgroud)

你能告诉我这个问题吗?

reader.HasRows()电话后发生了什么,redaer没有任何行....

Pra*_*ana 5

没有必要只检查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);
                            }
Run Code Online (Sandbox Code Playgroud)

避免使用SQLInjection

除此之外,您的代码将允许SQLInjection,因为您在查询中直接传递值...使用参数化查询而不是像这样的代码.

查询中的日期时间条件问题

可能存在问题,因为您在不应用任何转换的情况下比较where条件中的datetime值.如果使用参数化sql查询,将解决此问题.

  • @AJAYcHIGURUPATI - 好的,但我建议你应该避免使用sql注入,并使用参数化查询.... (3认同)