2013-04-05 1 views
0

Может кто-нибудь подтвердить или оспаривать проблему? Я имею доступ к базе данных ACCDB с помощью DataReader. Я настраиваю DataReader и запрашиваю базу данных. Когда я проверяю DataReader.HasRows, я прав, независимо от того, присутствуют ли записи или нет.Datareader.HasRow неверен

Я дважды проверял, что таблица данных пуста, никаких записей вообще, но DataReader.HasRows все еще говорит, что у нее есть записи.

Если я продолжу и попробую DataReader.Read, когда я знаю, что нет возвращенных записей, я получаю сообщение об ошибке «Нет данных для строки/столбца». что можно было бы ожидать.

Кто-нибудь видел это раньше? Или вы можете сказать, что этого не происходит?

Благодаря

sql = @"SELECT a.License, a.ClassID, a.CurrentlyIn, a.TotalScans " + 
    @"FROM Attendance a " + 
    @"WHERE a.License = " + myScan.LicenseInt + 
     @" AND a.ClassID = " + myScan.ClassID + ";"; 
_parent.StatusOutput(sql); 

cmdDB = new OleDbCommand(sql, cnDB); 
try 
{ 
    //cnDB.Open(); 

    drDB = cmdDB.ExecuteReader(); 
    if (drDB.HasRows) 
    { 
     _parent.StatusOutput("Data reader has no rows"); 
    } 
    else 
    { 
     _parent.StatusOutput("Data reader has rows."); 
     drDB.Read(); 
     _parent.StatusOutput(drDB["License"].ToString() + ", " + drDB["ClassID"].ToString()); 
    } 

Там мы идем. Извините за мое замешательство в том, как опубликовать это.

+4

Можете ли вы включить фрагмент кода, демонстрирующий это поведение? – EkoostikMartin

+0

Также укажите .Net версию и профиль. – Amy

+0

У вас не может быть строк и по-прежнему выдавать запрос, для которого значение HasRows равно true. Это будет зависеть от запроса. Это может быть что-то еще в вашем коде. Как сказал @EkoostikMartin, напишите фрагмент кода, который производит это. – Pete

ответ

0

В примере кода, как здесь Если читатель строки, то он выводит сообщение об ошибке

и если читатель не имеет строки печатает, что он имеет и читает и бросает исключение

своп:

if (drDB.HasRows) 
     { 
      _parent.StatusOutput("Data reader has rows."); 
      drDB.Read(); 
      _parent.StatusOutput(drDB["License"].ToString() + ", " + drDB["ClassID"].ToString()); 

        } 
     else 
     { 
      _parent.StatusOutput("Data reader has no rows"); 

     } 
+0

Когда этот код работает, я знаю, что оператор SQL не возвращает строк, но оператор вывода говорит: «У чтения данных есть строки.«Это означает, что drDB.HasRows возвращает true, даже если нет строки. Я помещал оператор вывода в истинное условие, чтобы увидеть, даст ли он мне некоторые данные, но он возвращается без каких-либо данных. Это верно, потому что я знаете, нет вернувшихся строк. –

+0

Тупой, тупой, немой ошибка. Извините, что беспокоило вас, ребята, с ним. Еще раз не торопитесь и не устанете. –