Oledb ne renvoyant que dbnull, qu'est-ce que j'ai fait de mal?
-
19-09-2019 - |
Question
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.
}
Ceci est mon code exact. Le champ 0 est la clé principale, donc ne devrait jamais être nul, mais chaque ligne renvoyée de la base de données a tous les champs définis sur dbnull! Je ne vois pas ce que je fais de mal, quelqu'un peut-il faire la lumière à ce sujet?
Ma chaîne de connexion est:
Fournisseur = Microsoft.Jet.oledb.4.0; Source de données = C: Path To Database.MDB
La solution
Pour une raison ou une autre, en utilisant le *
Le sélecteur de colonne était en train de brouiller les colonnes. L'utilisation d'une liste spécifique corrige cela. Je suis toujours curieux des raisons pour lesquelles cela pourrait arriver.
Version fixe:
OleDbCommand personQuery = new OleDbCommand("SELECT [ID], [Surname], ... FROM [Individual]", _access);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow