Должен ли я вызвать SqlDataReader.HasRows, если я вызываю SqlReader.Read - программирование
Подтвердить что ты не робот

Должен ли я вызвать SqlDataReader.HasRows, если я вызываю SqlReader.Read

Попытка выяснить, полезно ли добавить 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
    }
}    
4b9b3361

Ответ 1

Нет. Нет необходимости проверять (dr.HasRows), если DataReader содержит любую строку или нет.

Read() вернет False, если больше нет строк для извлечения, но Reader.HasRows гораздо больше говорит о том, что он делает, чем Read(), поэтому это будет хорошая практика использовать Reader.HasRows, потому что вы можете случайно сделать что-то отличное от Read(), которое может попасть в исключение.

Ответ 2

Будьте осторожны. HasRows() возвращает false для моего запроса CTE, хотя есть строки (на самом деле 437 строк).

Ответ 3

Не обязательно проверять, имеет ли DataReader строки (dr.HasRows). Метод Read() вернет true, если есть больше данных для чтения и false, если больше нет данных, тем самым нарушив цикл while.

Ответ 4

Я думаю, что это в основном для хранимых процедур, которые могут иметь или не иметь данных (один или несколько наборов результатов), и "проще" сначала проверить, если вы также выполняете другие действия, кроме цикла while (т.е. инициализируйте заголовок /footer и т.п. если есть данные).

Ответ 5

попробовать

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

Ваше мнение требуется