2017-06-12 6 views
0

今日、奇妙な問題が発生し始めました。 SqlDataReaderの結果を評価しようとすると、利用可能なデータがないことが示されますが、試しても期待通りに機能しません。例えばasp.net WebフォームアプリケーションのデバッグでInvalidOperationExceptionがスローされる2012年12月

、このクエリを持つ:私は読者を評価していない場合

using (SqlDataReader reader = cmd.ExecuteReader()) 
        { 
         while (reader.Read()) 
         { 
          obj.Id = int.Parse(reader[0].ToString()); 
         } 
        } 

は大丈夫作品(私は何を意味するかとのイメージの下を参照)。

enter image description here

誰も私がこれをデバッグに役立つことはできますか?私は視覚スタジオ2013プロフェッショナルを使用しています。 DBにデータがあり、読者を評価しないとすべて正常です。 cmd文字列はSelect * from MyTable

答えて

0

です。評価ステップでは、返されたレコードが使用されているようです。 reader.Read()は、次のレコードまで続きます。

これが真であるためには、私はあなたが1つの戻り値だけを探していると仮定します。 もしそうなら、cmd.ExecuteScalar()コマンドを使用して、リーダーを一切必要とせずに単一の値を返すことができます。あなたの評価は、あなたの.Read()を消費しているという事実をテストしたい場合は

obj.id = cmd.ExecuteScalar().ToString(); 

または

obj.id = Convert.ToInt32(cmd.ExecuteScalar()); 

:あなたはおそらく正しい型のように、あなたの結果をキャストする必要があります

obj.id = cmd.ExecuteScalar(); 

2つの値を返し、最初の値を評価します。後で2番目の値を受け取る必要があります。

+0

申し訳ありませんが、これは100個ほどの値が読み取られることを忘れています。 – Zippy

+0

@Zippyなので、あなたが評価してもそれらはすべて破損しますか?読者の要素全体を評価者に持ち込んで何も返さないことがあります。 –

+0

私が 'cmd.ExecuteReader'で読者を評価すると、期待通りの値を持つ100行があることがわかります... – Zippy

関連する問題