OLEDB só voltando Dbnull, o que eu fiz de errado?
-
19-09-2019 - |
Pergunta
Eu tenho o seguinte código:
// 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.
}
Este é o meu código exato. O campo 0 é a chave primária, portanto, nunca deve ser nula, mas cada linha que está sendo retornada do banco de dados tem todos os campos definidos como dbnull! Não consigo ver o que estou fazendo de errado, alguém pode esclarecer isso?
Minha string de conexão é:
Provedor = microsoft.jet.oledb.4.0; fonte de dados = c: path to database.mdb
Solução
Por um motivo ou outro, usando o *
O seletor de colunas era colunas de conferência. O uso de uma lista específica corrige isso. Ainda estou curioso para saber as razões pelas quais isso pode acontecer.
Versão fixa:
OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow