Je souhaite stocker les valeurs des colonnes, c'est-à-dire les noms de colonne, et les valeurs de lignes d'une ligne spécifique dans deux listes distinctes. Provider
et Document
sont tous deux de List<string>
. Mais comme il y a un conflit de type avec Document
, j'utilise var Document
, donc le compilateur l'accepte.C# - Essayer d'ajouter des valeurs de ligne à la liste throws InvalidOperationException
Le code suivant fonctionne parfaitement bien jusqu'à ce que var Document = Enumerable.Range(0, dr.FieldCount).Select(dr.GetValue).ToList();
OleDbCommand cmd = new OleDbCommand(abfrage, conn);
OleDbDataReader dr;
try
{
conn.Open();
dr = cmd.ExecuteReader();
Provider = Enumerable.Range(0, dr.FieldCount)
.Select(dr.GetName)
.ToList();
// Following line will throw exception
var Document = Enumerable.Range(0, dr.FieldCount)
.Select(dr.GetValue)
.ToList();
dr.Close();
dr.Dispose();
}
catch (System.InvalidOperationException inv)
{
MessageBox.Show(inv.Message);
throw;
}
La première liste a les noms de colonnes correctement stockées, mais l'autre jette un InvalidOperationException
et dit qu'il n'y a pas de valeurs dans les lignes ou les colonnes . C'est correct pour certaines colonnes (elles sont vides). Je l'ai testé avec un autre DB-Table où chaque colonne/ligne a une valeur mais j'obtiens la même exception ici.
Qu'est-ce que je fais mal?
Merci d'avance!
Edit:
Voici deux captures d'écran qui montrent les valeurs lues par le lecteur.
Le premier avec les noms de colonnes (les valeurs sont grisées, il y a des données sensibles): first results
Le second avec les valeurs de toute la ligne: read values
J'ai essayé 'while (dr.Read()) { // var = document Enumerable.Range (0, dr.FieldCount) .Select (dr.GetValue) .Lister()); } 'et en effet il stocke/ajoute les valeurs à' var Document'. Aussi, comme vous l'avez dit, 'Document' est jeté. J'ai essayé de le lancer mais je ne suis pas sûr de savoir comment gérer ça. J'ai également essayé votre suggestion pour appeler le 'AddRange()' -Method sans succès. – Allix
Je pense que je l'ai eu. Ce code fonctionne et 'Document' conserve les résultats:' IEnumerable
@Allix, oui, de cette façon fonctionnera bien. Vous pourriez faire un document un IList