문제

다음 코드가 있습니다.

// 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top