我应该调用SqlDataReader吗?如果我调用sqlreader.read

本文关键字:调用 sqlreader read 如果 SqlDataReader 我应该 | 更新日期: 2023-09-27 17:50:51

试着看看在while (dr.read())函数之前添加if (dr.HasRows)是否有益。我的意思是,从技术上讲,如果它没有行,它就不会读取,所以你先检查这个有关系吗?

using (SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr.HasRows)
    {
        while (dr.Read())
        {
            ....do stuff here
        }
    }
}

或者如果你只是确保它有值可以提供。

using (SqlDataReader dr = cmd.ExecuteReader())
{
    while (dr.Read())
    {
        ....do stuff here
    }
}    

我应该调用SqlDataReader吗?如果我调用sqlreader.read

不。如果DataReader中没有行,则不强制检查(dr.HasRows)

Read()将返回False如果没有更多的行来获取,但是Reader.HasRowsRead()更能说明它所做的事情,所以它将是一个良好的实践使用Reader.HasRows,因为您可能会意外地做一些其他的事情,而不是Read(),这可能会陷入异常。

小心。对于我的CTE查询,HasRows()返回false,即使有行(实际上是437行)。

检查DataReader是否有行(dr.HasRows)不是强制性的。如果有更多的数据要读取,Read()方法将返回true,如果没有更多的数据将返回false,从而中断while循环。

我认为这主要是存储过程可能或可能没有数据(一个或多个结果集),它是"更容易"先检查,如果你也做其他的东西比while循环(即初始化页眉/页脚等当有数据)。

try

            string myconnection = "datasource= localhost;port=3306;username=root;password=root;";
            MySqlConnection myconn = new MySqlConnection(myconnection);
            //MySqlDataAdapter mydata = new MySqlDataAdapter();
            MySqlDataReader myreader;
            MySqlCommand SelectCommand = new MySqlCommand("select *from student_info.student_info where username= '" + textBox1.Text +" 'and password=' " + textBox2.Text +"';",myconn );

            myconn.Open();
            myreader = SelectCommand.ExecuteReader();
            int count = 0;
            if (myreader.HasRows) //returing false but i have 4 row
            {
                while (myreader.Read()) //returing false 
                {
                    MessageBox.Show("in button3");
                    count = count + 1;
                }
            }

需要你的意见