23

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

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
    }
}    
4

5 回答 5

20

(dr.HasRows)否..检查DataReader 是否包含任何行不是强制性的。

Read()如果没有更多的行要获取,将返回FalseReader.HasRows ,但它更能说明它的作用,Read()因此使用它是一个好习惯Reader.HasRows因为你可能会不小心做了一些Read()可能会陷入异常的事情。

于 2013-01-07T13:17:07.077 回答
5

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

于 2013-11-28T22:37:52.637 回答
2

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

于 2013-01-07T13:12:18.537 回答
1

我认为这主要用于存储过程,这些存储过程可能有也可能没有数据(一个或多个结果集),并且如果您还执行除了 while 循环之外的其他事情(即初始化页眉/页脚等),首先检查“更容易”。有数据时)。

于 2013-01-07T13:11:13.360 回答
-4

尝试

            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;
                }
            }

需要您的意见

于 2013-06-14T06:24:50.307 回答