J'itère un DataTable dans mon code C #. J'essaie d'obtenir le contenu en utilisant une colonne nommée "columnName" de la ligne nommée "row" en utilisant -
object value = row["ColumnName"];
Je reçois cette erreur -
Erreur: System.Reflection.TargetInvocationException: l'exception a été jeté par la cible d'une invocation. ---> System.ArgumentException: la colonne 'FULL_COUNT' n'appartient pas à la table. at System.Data.DataRow.GetDataColumn (String columnName)
Comment est-ce possible ? Mon ensemble de requêtes/résultats SQL comporte une colonne portant ce nom et la requête s'exécute même dans le studio de gestion.
Comment puis-je corriger cette erreur?
Je suppose que votre code est une itération supposée être quelque chose comme ça
DataTable table = new DataTable();
foreach (DataRow row in table.Rows) {
foreach (DataColumn col in table.Columns) {
object value = row[col.ColumnName];
}
}
Si tel est le cas, row["ColumnName"]
de chaque itération recherche la même colonne avec le nom ColumnName
qui, de toute évidence, n’existe pas dans votre table.
La manière correcte est row[ColumnName]
ou row[col.ColumnName]
dans l'itération ci-dessus
J'ai eu un problème similaire sur mon code c #, en utilisant un jeu de données que j'avais initialisé avec succès et rempli avec les données de la base de données.
Donc, mon jeu de retour était:
data = new Byte [0];
data = (Byte []) (dataset.Tables [0] .Rows [0] ["systemLogo_img"]);
Bien sûr, l’erreur était dans la recherche de la colonne 'systemLogo_img'.
J'ai remarqué que vous n'avez simplement PAS à appeler/qualifier le nom de la colonne. La correction est donc:
data = new Byte [0];
data = (Byte []) (dataset.Tables [0] .Rows [0] .ItemArray [0]);
En termes simples: utilisez "ItemArray" à la position.
Merci
N'écrivez pas les noms de colonnes Gradeview à la place des noms de colonnes de la base de données.
dataGridViewEmployeeClass.Rows[n].Cells[0].Value = item["write there Database ColumnS names"].ToString();