OLEDB只返回dbnull,我做错了什么?
-
19-09-2019 - |
题
我有以下代码:
// 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是主要键,因此永远不要为null,但是从数据库返回的每一行都将所有字段设置为dbnull!我看不到我在做错什么,有人可以阐明这一点吗?
我的连接字符串是:
提供者= microsoft.jet.oledb.4.0;数据源= c: path to database.mdb
解决方案
出于某种原因,使用 *
列选择器是笨拙的列。使用特定列表解决此问题。我仍然对可能发生这种情况的原因感到好奇。
固定版本:
OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);
不隶属于 StackOverflow