Comment vérifier si une colonne existe dans une table de données


91

J'ai une datable générée avec le contenu d'un fichier csv. J'utilise d'autres informations pour mapper une colonne du csv (maintenant dans la table de données) aux informations que l'utilisateur doit remplir.

Dans le meilleur monde, la cartographie serait toujours possible. Mais ce n'est pas la réalité ... Donc, avant d'essayer de mapper la valeur de la colonne datable, je devrais vérifier si cette colonne existe même. Si je ne fais pas cette vérification, j'ai une ArgumentException.

Bien sûr, je peux vérifier cela avec un code comme celui-ci:

try
{
    //try to map here.
}
catch (ArgumentException)
{ }

mais j'ai pour l'instant 3 colonnes à mapper et certaines ou toutes pourraient être existantes / manquantes

Existe-t-il un bon moyen de vérifier si une colonne existe dans une table de données?


Avez-vous affaire à un DataSet/ DataTable? Si tel est le cas, vous pouvez consulter la collection Column de la table pour obtenir une liste de toutes les colonnes de la table.
asawyer

Oui, @asawyer, le contenu du csv est sauvegardé dans une table de données. Je vais jeter un œil dans ce sens.
Rémi

Réponses:


192

Vous pouvez utiliser operator Contains,

private void ContainColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;        
    if (columns.Contains(columnName))
    {
       ....
    }
}

MSDN - DataColumnCollection.Contains ()


êtes-vous sûr que c'est linq? Je n'ai aucune référence à linq dans mon code et ce travail
Rémi

c'est un opérateur simple de colonnes
Aghilas Yakoub

Ce n'est pas une méthode d'extension linq, mais plutôt un membre du type DataColumnCollection, mais cela fonctionnerait également très bien.
asawyer

5
@AghilasYakoub Bien sûr, j'ai oublié celui-là. Probablement la meilleure façon de procéder dans ce cas également. Une chose cependant, "Vous pouvez utiliser l'opérateur Contient" - Ce n'est pas un opérateur, c'est une méthode membre.
avocat du


8

Pour plusieurs colonnes, vous pouvez utiliser un code similaire à celui donné ci-dessous. J'étais juste en train de parcourir ceci et j'ai trouvé une réponse pour vérifier plusieurs colonnes dans Datatable.

 private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames)
    {
        bool iscolumnExist = true;
        try
        {
            if (null != tableNameToCheck && tableNameToCheck.Columns != null)
            {
                foreach (string columnName in columnsNames)
                {
                    if (!tableNameToCheck.Columns.Contains(columnName))
                    {
                        iscolumnExist = false;
                        break;
                    }
                }
            }
            else
            {
                iscolumnExist = false;
            }
        }            
        catch (Exception ex)
        {

        }
        return iscolumnExist;
    }


0
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.