当前位置:  开发笔记 > 编程语言 > 正文

SqlDataReader的问题

如何解决《SqlDataReader的问题》经验,为你挑选了1个好方法。

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

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

List empTimingsList = 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没有任何行....



1> Pranay Rana..:

没有必要只检查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查询,将解决此问题.


@AJAYcHIGURUPATI - 好的,但我建议你应该避免使用sql注入,并使用参数化查询....
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有