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; data source = c : path to database.mdb
해결책
어떤 이유로 든, *
열 선택기는 뒤죽박죽 열이었다. 특정 목록을 사용하면이 문제가 해결됩니다. 왜 이런 일이 일어날 지에 대해 여전히 궁금합니다.
고정 버전 :
OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);
제휴하지 않습니다 StackOverflow