2012-02-14 1 views
0

Устройство чтения данных с именем eventreader может быть пустым, и я пытаюсь разработать соответствующий оператор, чтобы определить, содержит ли datareader строки и если требуется запись записи.Если строка не существует в datareader

oledbexecute("SELECT [Unit No] FROM UnitOpenAtEvent WHERE [Event ID]='" + strDate + "'"); 
      eventReader = dbcommand.ExecuteReader(); 
      for (int i = 0; i < checkboxEvent.Items.Count; i++) 
      { 
       if (checkboxEvent.GetItemCheckState(i) == CheckState.Checked) 
       { 
        if (eventReader["Unit No"] != DBNull.Value) 
        { 
         while (eventReader.Read()) 
         { 
          if (eventReader["Unit No"].ToString() == checkboxEvent.Items[i].ToString()) 
          { 
           oledbexecute("INSERT INTO UnitOpenAtEvent ([Event ID],[Unit No]) VALUES ('" + strDate + checkboxEvent.Items[i].ToString() + "'"); 
           intReader = dbcommand.ExecuteNonQuery(); 
          } 
         } 
        } 
        else 
        { 
         oledbexecute("INSERT INTO UnitOpenAtEvent ([Event ID],[Unit No]) VALUES ('" + strDate + checkboxEvent.Items[i].ToString() + "'"); 
         intReader = dbcommand.ExecuteNonQuery(); 
        } 
       } 
       else if (checkboxEvent.GetItemCheckState(i) == CheckState.Unchecked) 
       { 

        // this is effectively a copy of above 
       } 
      } 
+0

Вы имеете в виду 'Items.Count == 0'? –

+0

Контрольный список У меня нет проблемы с его idatareader, с которым у меня возникают проблемы, и на idatareader нет функции count. –

ответ

1

Вы можете проверить, имеет ли DataReader любые строки, например,

if (eventReader.HasRows) 

Update: Исходя из комментариев ниже Re: IDataReader ...

Вы могли бы сделать что-то вроде этого (укороченный включать наиболее значимые биты для лаконичности)

eventReader = dbcommand.ExecuteReader(); 
bool hasRow = eventReader.Read(); 
if (hasRow) 
{ 
    for (int i = 0; i < checkboxEvent.Items.Count; i++) 
    { 
     ... 
      ... 
      while (hasRow) 
      { 
       // Code in here to deal with each row 
       hasRow = eventReader.Read(); 
      } 
    } 
} 
+0

Я дам это сейчас. –

1

Возможно, вы не понимаете, как работает IDataReader.Read().

С этой странице справки:

Return Value 
Type: System.Boolean 
true if there are more rows; otherwise, false. 

и

Положение по умолчанию IDataReader находится перед первой записью. Поэтому вы должны позвонить в «Чтение», чтобы начать доступ к любым данным.

Так что, когда вы впервые получаете datareader, он не будет указывать на какие-либо данные. Если вы вызываете .Read(), он вернет true, если есть строка для перемещения и перехода к ней, и если нет строк, она вернет false.