2013-07-15 4 views
3

У меня есть странная проблема. Я использую MySQL Connector.NET, но MySqlReader.Read() иногда возвращает true, а иногда и false. MySqlReader.HasRows верно как в случае, так и в VisualStudio. Я вижу, что объект-читатель сохраняет все значения.MySQL .Net Connector - MySqlReader.Read() возвращает false

Почему это могло случиться?

Вот мой код:

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() возвращает ложь. Спасибо Joachim за то, что я сделал это полезное уведомление.

+0

какая версия разъема вы используете? и какой MySQL? – nawfal

+0

Я чувствую, что код внутри 'while' имеет значение. –

+0

@MichaelPerrenoud - как это может быть актуально, если 'Read()' return 'false' предотвращает ввод« во время »;) – Joe

ответ

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

Сделав тоннаж этого типа вещей, я знаю, что это работает очень хорошо.

+0

Мне кажется, что это странно, так как это почти то же самое, что и я, но это работает нормально. Спасибо, Олли! – Joe

+0

Yah, метод побочных эффектов и вызовы свойств иногда делают странные вещи, особенно устаревшие, такие как HasRows. –

 Смежные вопросы

  • Нет связанных вопросов^_^