OLEDB только возвращая Dbnull, что я сделал неправильно?

StackOverflow https://stackoverflow.com/questions/1310127

  •  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 является основным ключом, поэтому никогда не должно быть нулевым, но каждая строка возвращается из базы данных, все поля установлены в DBNull! Я не вижу, что делаю не так, может ли кто -нибудь пролить свет на это?

Моя строка подключения:

Provider = 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