我有一些奇怪的问题。我使用的是MySQL Connector.NET,但MySqlReader.Read()
有时会返回true,有时会返回false。 MySqlReader.HasRows
两种情况都是正确的,在VisualStudio中我可以看到读者对象包含所有值。
为什么会发生这种情况?
这是我的代码:
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。感谢Joachim让我提出这个有用的通知。
答案 0 :(得分:1)
此HasRows属性不在.net的所有版本中。为什么不像这样重铸你的代码呢?
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.
}
完成这种东西的吨位后,我知道这很有效。