次のようなコードがあります。
SqlDataReader sdr = null;
.
.
sdr = cmd.ExecuteReader();
while(sdr.Read()){
string x = sdr["x"].ToString();
Console.WriteLine(x);
long? y = Int64.Parse(sdr["y"].ToString());
}
現在、y の値を解析する際の問題をデバッグしています。データベースでは、コンソールに書き込まれた値 x について、y は数値であると表示されます (そうでない場合は null になります)。
例外がスローされたら、sdr にカーソルを合わせて、保存されている実際のデータに移動します。要素 [0] の値は、画面に書き込まれたばかりの値 x に対応します。つまり、x の正しい値が表示されていることがわかるため、x は確実にアクセスされます。ただし、Visual Studio 2008 では、デバッグ時にオブジェクトのメモリを確認すると、最初の要素には、コンソールに表示されたものと同じ x 列の値がありません!
・アクセスした要素が見えないのはなぜ?-この問題は、数値が正しく解析されていないことに関連していますか?
もう 1 つ奇妙なことに気付きました。Visual Studio で sdr オブジェクトを初めて見たときに、要素が表示されます。マウスを画面の反対側に移動してから、オブジェクトにカーソルを合わせて、sdr リーダー オブジェクトの要素を反復処理しようとすると、要素がありません-あたかも空であるかのように?!?!