3 votes

OleDB ne renvoie que DbNull, qu'est-ce que j'ai fait de mal ?

J'ai le code suivant :

// 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.
}

Voici mon code exact. Le champ 0 est la clé primaire, et ne devrait donc jamais être nul, mais chaque ligne renvoyée par la base de données a tous les champs à la valeur DBNull ! Je ne vois pas ce que je fais de mal, quelqu'un peut-il m'éclairer ?

Ma chaîne de connexion est la suivante

Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\path\to\database.mdb

2voto

Matthew Scharley Points 43262

Pour une raison ou une autre, l'utilisation du * Le sélecteur de colonne mélangeait les colonnes. L'utilisation d'une liste spécifique corrige ce problème. Je suis toujours curieux de savoir pourquoi cela peut se produire.

Version corrigée :

OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X