121 votes

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

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

Dans le meilleur des mondes, la cartographie serait toujours possible. Mais ce n'est pas la réalité... Donc, avant d'essayer de mapper la valeur de la colonne de la table de données, je dois vérifier si cette colonne existe. 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 à cartographier et certaines ou toutes peuvent exister/manquer

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

243voto

Aghilas Yakoub Points 16682

Vous pouvez utiliser operator Contains ,

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

MSDN - DataColumnCollection.Contains()

92voto

adinas Points 844
myDataTable.Columns.Contains("col_name")

8voto

Pour les colonnes multiples, vous pouvez utiliser un code similaire à celui donné ci-dessous. Je viens de parcourir ce code et j'ai trouvé une réponse pour vérifier les colonnes multiples dans les tables de données.

 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;
    }

4voto

supercrash10 Points 51

Il est beaucoup plus précis d'utiliser IndexOf :

If dt.Columns.IndexOf("ColumnName") = -1 Then
    'Column not exist
End If

Si le Contains est utilisé, il ne fera pas la différence entre ColumName et ColumnName2.

Mise à jour :

If ds.Tables("TableName").Columns.IndexOf("ColumnName") = -1 Then
    'Column not exist
End If

2voto

Hien Nguyen Points 8302

Sur la base de la réponse acceptée, j'ai créé une méthode d'extension pour vérifier l'existence d'une colonne dans une table.

Je partage pour qui s'inquiète.

 public static class DatatableHelper
 {
        public static bool ContainColumn(this DataTable table, string columnName)
        {
            DataColumnCollection columns = table.Columns;
            if (columns.Contains(columnName))
            {
                return true;
            }

            return false;
        }
}

Et utiliser comme dtTagData.ContainColumn("SystemName")

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