【发布时间】:2009-08-21 04:45:51
【问题描述】:
我有以下代码:
// personCount = 7291; correct value
int personCount = (int)new OleDbCommand("SELECT COUNT(*) AS [count] FROM [Individual]", _access).ExecuteScalar();
List<Person> people = new List<Person>();
OleDbCommand personQuery = new OleDbCommand("SELECT * FROM [Individual]", _access);
using (OleDbDataReader personReader = personQuery.ExecuteReader())
{
int curPerson;
while (personReader.Read())
{
curPerson++;
// This runs several times
if (personReader.IsDBNull(0)) continue;
// [snip] create a new Person and add it to people
}
// at this point, curPerson == 7291 but the list is empty.
}
这是我的确切代码。字段 0 是主键,因此不应为空,但从数据库返回的每一行都将所有字段设置为 DBNull!我看不出我做错了什么,有人能解释一下吗?
我的连接字符串是:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\database.mdb
【问题讨论】:
-
当您对数据库执行查询时,返回的列的顺序是什么?你检查过吗?
-
无法判断。就像我说的,每个字段都返回 DBNull。 (至少,对于我在进行
if (IsDBNull) continue;进行集体检查之前手动检查的 2-3 条记录。 -
我不敢相信。您确定序数位置 0 是主键吗? _access 和 _accessGp 是否属于同一个数据库?
-
您可以做一件事来调试这种情况 - 使用此查询填充数据集,并将其绑定到数据网格。这样您就可以知道确切的数据是什么。
-
@adatapost:它们是同一个变量,通过我的清理。
标签: c# oledb oledbdatareader