MySQL.Net连接器-MySqlReader.Read()返回false

本文关键字:返回 false Read Net 连接器 -MySqlReader MySQL | 更新日期: 2023-09-27 18:22:17

我遇到了一些奇怪的问题。我使用MySQL Connector.NET,但MySqlReader.Read()有时返回true,有时返回false。MySqlReader.HasRows在这两种情况下都是真的,在VisualStudio中我可以看到reader对象包含所有值。

为什么会发生这种情况?

这是我的代码:

MySqlCommand sqlCommand = new MySqlCommand(sqlCode, this._conn);
MySqlDataReader rdr = sqlCommand.ExecuteReader();
PopulateMessage("--> " + serverName + ": " + dbName);
int fields = rdr.VisibleFieldCount;
//make headers
int[] fmaxl = new int[fields];
string[] headers = new string[fields];
List<string[]> vals = new List<string[]>();
if (rdr.HasRows)
{
        for (int hi = 0; hi < fields; hi++)
        {
                string val = rdr.GetName(hi);
                headers[hi] += val;
                fmaxl[hi] = val.Length;
        }
        while (rdr.HasRows && rdr.Read()) // <-- here the Read() method returns 
                                          //     false or true sometimes
                                          //     while HasRows is true
        {
                ...

EIDT:例如,rdr保存99行值(在VS中检查),并且在第一次调用时Read()方法返回false。感谢约阿希姆让我发布这个有用的通知。

MySQL.Net连接器-MySqlReader.Read()返回false

并非所有版本的.net都有这个HasRows属性。为什么不这样重新编译代码呢?

boolean firstRow = true;
while (rdr.Read()) 
{
   if (firstRow) {   // get the column names, but only once 
       firstRow = false;
       for (int hi = 0; hi < fields; hi++)
       {
            string val = rdr.GetName(hi);
            headers[hi] += val;
            fmaxl[hi] = val.Length;
       }
    }
    ... //process each row.
}

做过这种吨位的东西,我知道这很有效。