2016-10-15 6 views
0

system.invalid operation exception whileループの後にデータが存在しないときに無効な読み取りが試行されます。Readerでデータが存在しないときに無効な読み取りを試行する

byte[] fingerprint() 
{ 
    OpenConnection(); 
    SqlCommand command = connection.CreateCommand(); 
    SqlDataReader Reader; 
    command.CommandText = "SELECT fp,name FROM fptable"; 
    Reader = command.ExecuteReader(); 
    // Reader= command.ExecuteReader(CommandBehavior.CloseConnection); 
    try 
    { 
     while (Reader.Read()) 
     { 
      Reader.GetValue(0); 
      String name = Reader.GetValue(1) as String; 
      byte[] temps = Reader.GetValue(0) as byte[]; 
      list.Add(temps); 
      names.Add(name); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    byte[] temp = Reader.GetValue(0) as byte[]; //**error at this point** 
    // byte[] temp = Reader["fp"] as byte[]; 
    // MakeReport(list.Count+""+names.Count); 
    return temp; 
} 
+1

なぜあなたはその時点で再び読者から読もうとしていますか?その時点で、コードはクエリによって返されたデータの最後に達しています(ループを終了)ので、そのエラーが発生するのは正常です。 ....読み取るデータがありません – Steve

+0

あなたのリーダーはwhileループの最後で終了します。あなたはそれを読み続けることができません –

答えて

1

データはすでに取得され、リストに保存されています。 whileループでは、リーダーは結果セットで列挙し、データが存在しないインデックスに移動しました。

リスト(リストと名前)を使用して、そのデータをさらに操作してください。

サイドノート - 検索したデータはテーブルからのものであり、関連性があるため、リストや他の複雑なオブジェクトの代わりに辞書を使用したい場合があります。

関連する問題