Pregunta

Tengo el siguiente 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 es mi código exacto. El campo 0 es la clave principal, por lo que nunca debe ser nula, pero cada fila que se devuelve de la base de datos tiene todos los campos establecidos en DBNull. No puedo ver lo que estoy haciendo mal, ¿alguien puede arrojar algo de luz sobre esto?

Mi cadena de conexión es:

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C: Path a database.mdb

¿Fue útil?

Solución

Por una razón u otra, usando el * El selector de columnas era columnas juntas. El uso de una lista específica soluciona esto. Todavía tengo curiosidad por las razones por las cuales esto podría suceder.

Versión fija:

OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top