Comment puis-je savoir si une colonne existe dans un VB.Net DataRow

je suis en train de lire un fichier XML dans un ensemble de données et je dois extraire les données de cet ensemble de données. Comme il s'agit d'un fichier de configuration éditable par l'utilisateur, les champs peuvent ou non être présents. Pour bien gérer les champs manquants, j'aimerais m'assurer que chaque colonne de la fenêtre de données existe et n'est pas DBNull.

je vérifie déjà la présence de DBNull mais je ne sais pas comment m'assurer que la colonne existe sans qu'elle ne lance une exception ou en utilisant une fonction qui boucle tous les noms de colonne. Qu'est-ce que l' la meilleure méthode pour faire cela?

49
demandé sur Alexander Abakumov 2008-10-07 18:30:09

4 réponses

Datarow's sont gentils dans la façon dont ils ont leur table sous-jacente liée à eux. Avec la table sous-jacente, vous pouvez vérifier qu'une ligne spécifique a une colonne spécifique.

    If DataRow.Table.Columns.Contains("column") Then
        MsgBox("YAY")
    End If
148
répondu John Chuckran 2008-10-07 14:39:44

Vous pouvez utiliser DataSet.Tables(0).Columns.Contains(name) pour vérifier si le DataTable contient une colonne avec un nom particulier.

17
répondu Phillip Wells 2012-04-23 11:02:47

une autre façon de savoir si une colonne existe est de vérifier pour Nothing la valeur retournée de Columns index de collection en lui passant le nom de la colonne:

If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
    MsgBox("YAY")
End If

cette approche pourrait être préférée à celle qui utilise la méthode Contains("ColumnName") lorsque le code suivant devra par la suite obtenir ce DataColumn pour une utilisation ultérieure. Par exemple, vous pouvez vouloir savoir quel type a une valeur stockée dans la colonne:

Dim column = DataRow.Table.Columns("ColumnName")
If column IsNot Nothing Then
    Dim type = column.DataType
End If

dans ce cas, cette approche vous évite d'appeler le Contains("ColumnName") tout en rendant votre code un peu plus propre.

2
répondu Alexander Abakumov 2015-12-30 18:53:12

Vous pouvez encapsuler votre bloc de code avec un essai ... catch statement, et quand vous exécutez votre code, si la colonne n'existe pas il lancera une exception. Vous pouvez alors comprendre quelle exception spécifique il jette et le faire gérer cette exception spécifique d'une manière différente si vous le souhaitez, comme le retour "colonne non trouvée".

-3
répondu Anders 2008-10-07 14:32:26