2012-02-14 3 views
0

eventreaderという名前のデータリーダーが空である可能性があり、適切なステートメントを作成して、データレアに行が含まれているかどうか、必要レコードが存在するかどうかを検出しようとしています。行がデータレアに存在しない場合

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のカウント関数はありません。 –

答えて

1

DataReaderに、たとえば

if (eventReader.HasRows) 

更新:再以下のコメントから次の :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のデフォルトの位置は、最初のレコードの前にあります。 したがって、データへのアクセスを開始するには、Readを呼び出す必要があります。

初めてデータウェアハウスを取得したときに、データを参照することはありません。 .Read()を呼び出すと、移動先の行がある場合はtrueを返し、行がない場合はfalseを返します。

関連する問題