次の投稿は、phxsoftware(http://sqlite.phxsoftware.com)によるSystem.Data.SQLiteデータプロバイダーに関連しています。
DbDataReaderのReadメソッドやVisualStudio2008に質問(およびおそらく問題)があります。多くの例で、次のようなものが表示されます(このコードはあまり意味がないことを知っています...しかし、それは役立ちます目的):
DbDataReader reader = null;
Long ltemp = 0;
lock (m_ClassLock)
{
DbCommand cmd = dbCnn.CreateCommand();
cmd.CommandText = “SELECT col1 FROM table1”;
reader = cmd.ExecuteReader();
if (null != reader)
{
while (reader.Read())
{
ltemp += (long)reader[0];
}
}
reader.Close();
最初の質問-この例から私が理解していないのは、reader.Read()を事前に呼び出して、whileループで初めてデータが欠落しているということです。たとえば、リーダーに値(3,5,7,9)がある場合、cmd.ExecuteReader()から返されたリーダーは最初は3を指しているはずです、正しいですか?その後、reader.Read()は、whileループ内の後続の呼び出しで5、7、および9に移動します。しかし、reader.Read()は最初の「ltemp + = ...」行の前に呼び出されるため、最初の結果(3)をスキップしますか?
2番目の質問-(そしてこれはVSのバグかもしれないと思い始めています)「if(null!= ...」行のブレークポイントで停止したときに、デバッガーでこのコードのセットをステップスルーすると、Iリーダーに複数の行データ値が割り当てられているポップアップで、マウス操作とドリルダウンを明確に確認できます。ただし、そのポップアップ情報を閉じてから元に戻そうとすると、ドリルダウンすると次の行が表示されます。以前は明らかにデータがあった「列挙では結果が得られなかった」。
誰かがこの振る舞いを説明できますか?