以下帖子与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();
第一个问题 - 我从这个例子中不明白的是,我是第一次通过while循环调用reader.Read()来丢失数据吗?例如,如果读者有值(3,5,7,9),cmd.ExecuteReader()返回的阅读器最初应该指向3,对吗?然后reader.Read()将在while循环中的后续调用中移动到5,7和9。但是,因为在第一个“ltemp + = ...”行之前调用了reader.Read(),所以我跳过了第一个结果(3)?
第二个问题 - (我开始认为这可能是VS中的一个错误)如果我在调试器中单步执行这组代码,当我停在“if(null!= ... “我可以清楚地看到在弹出窗口中移动并向下钻取,读者有多个行数据值分配给它。但是,如果我关闭弹出信息,然后尝试重新启动它,当我向下钻取时看到“枚举没有结果”这一行,其中有明显的数据。
任何人都可以解释这种行为吗?
答案 0 :(得分:1)
在运行ExecuteReader后,请将此视图放在第-1行。您需要执行Read才能进入第0行。
IDataReader是一个仅向前的结构,你只能迭代它一次,调试器正在迭代它。
一般问题: