以下帖子与 phxsoftware ( http://sqlite.phxsoftware.com )的 System.Data.SQLite 数据提供程序有关
我对 DbDataReader 的 Read 方法和/或 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();
第一个问题 - 我从这个例子中不明白的是我第一次通过调用 reader.Read() 在 while 循环中丢失数据吗?例如,如果读取器具有值 (3,5,7,9),则从 cmd.ExecuteReader() 返回的读取器最初应该指向 3,对吗?reader.Read() 然后在 while 循环内的后续调用中移动到 5、7 和 9。但是,因为 reader.Read() 在第一个“ltemp += ...”行之前被调用,我是否跳过了第一个结果 (3)?
第二个问题-(我开始认为这可能是VS中的一个错误)如果我在“if(null!= ...”行的断点处停止时在调试器中单步执行这组代码,我可以清楚地看到 mu 将鼠标悬停在弹出窗口中并向下钻取,即阅读器分配了多个行数据值。但是,如果我关闭该弹出信息,然后尝试将其恢复,当我向下钻取时,我现在看到了该行“枚举没有结果”之前有明确的数据。
谁能解释这种行为?