SqlDataReader.HasRows всегда возвращает true, даже с пустым результатом - PullRequest
1 голос
/ 28 марта 2019

После просмотра множества тем о явлении SqlDataReader.HasRows, которое всегда возвращает истину даже при пустом результате (и особенно когда речь идет о запросе SQL с агрегатом), я полностью высыхаю в своем коде

Однако мой пример очень прост и HasRows возвращает True, FieldCount возвращает 1, даже если нет боковой линии phpMyAdmin.

query = "SELECT FK_BarId FROM tlink_bar_beer WHERE FK_BeerId = " + sqlDataReader.GetInt32(0);

MySqlConnection sqlConnexionList = new MySqlConnection("server=localhost;database=beerchecking;uid=root;password=;");
MySqlCommand commandList = new MySqlCommand(query, sqlConnexionList);
sqlConnexionList.Open();

int[] BarsIds;
using (MySqlDataReader sqlDataReaderList = commandList.ExecuteReader())
{
    if (sqlDataReaderList.HasRows)
    {
        try
        {
            BarsIds = new int[sqlDataReaderList.FieldCount];
            int counter = 0;

            if (sqlDataReaderList.Read())
            {
                while (sqlDataReaderList.Read())
                {
                    int id = sqlDataReaderList.GetInt32(counter);
                    BarsIds[counter] = id;
                    counter++;
                }
            }
        }
        finally
        {
            sqlDataReaderList.Close();
        }
    }
    else
    {
        BarsIds = new int[0];
    }
}

sqlConnexionList.Close();

Знаете ли вы, как получить значение HasRows false, когдастрок нет, как в результате phpMyAdmin?

Спасибо за чтение.

1 Ответ

0 голосов
/ 28 марта 2019

Я предпочитаю использовать знакомый DataTabe вместо DataReader, что-то вроде этого:

DataTable dt = new DataTable();
dt.Load(commandList.ExecuteReader());

if(dt.Rows.Count > 0){

    //rows exists
}else{

    //no rows
}
...