Следующая запись относится к поставщику данных System.Data.SQLite от phxsoftware (http://sqlite.phxsoftware.com)
У меня есть вопрос (и, возможно, проблема) с методом Read DbDataReader и / или Visual Studio 2008. Во многих примерах я вижу такие вещи, как (и я знаю, что этот код не имеет большого смысла ... но это служит цели):
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();
Первый вопрос. Что я не понимаю из этого примера, так это то, что я пропускаю данные в первый раз в цикле while, вызывая метод reader.Read () заранее? Например, если читатель имеет значения (3,5,7,9), возвращаемый читатель из cmd.ExecuteReader () должен изначально указывать на 3, правильно? Затем reader.Read () переместится на 5, 7 и 9 при последующих вызовах в цикле while. Но поскольку reader.Read () вызывается до первой строки «ltemp + = ...», пропускаю ли я первый результат (3)?
Второй вопрос - (и я начинаю думать, что это может быть ошибкой в VS) Если я перейду через этот набор кода в отладчике, когда остановлюсь на точке останова на «if (null! = ...») "Я могу ясно видеть, как мы размышляем и всплываем во всплывающем окне, что считывателю назначено несколько значений данных строки. Однако, если я закрою эту всплывающую информацию, а затем попытаюсь восстановить ее, когда я сверну, я сейчас см. строку «Перечисление не дало результатов», где ранее были четко данные.
Кто-нибудь может объяснить это поведение?