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?

Rémi
la source
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 ()

Aghilas Yakoub
la source
ê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
74
myDataTable.Columns.Contains("col_name")
adinas
la source
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;
    }
lokendra jayaswal
la source
0

Vous pouvez regarder la Columnspropriété d'un donné DataTable, c'est une liste de toutes les colonnes du tableau.

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

http://msdn.microsoft.com/en-us/library/system.data.datatable.columns.aspx

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

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
Boopathi.Indotnet
la source