1

在浏览了许多关于SqlDataReader.HasRows即使结果为空也总是返回 true 现象的主题后(尤其是当它是关于带有聚合的 SQL 查询时),我完全干了我的代码

但是我的示例非常简单,即使没有 phpMyAdmin 侧行,也会HasRows返回TrueFieldCount返回。1

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();

当 phpMyAdmin 结果中没有行时,您知道如何使 HasRows 为 false 吗?

谢谢阅读。

4

1 回答 1

1

我更喜欢使用辅助 DataTabe 而不是 DataReader,如下所示:

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

if(dt.Rows.Count > 0){

    //rows exists
}else{

    //no rows
}
于 2019-03-28T11:09:16.437 回答