Comment savoir si une colonne existe dans un DataRow VB.Net
Question
Je lis un fichier XML dans un DataSet et ai besoin d'extraire les données du DataSet. Puisqu'il s'agit d'un fichier de configuration éditable par l'utilisateur, les champs peuvent être ou ne pas être là. Pour bien gérer les champs manquants, je voudrais m'assurer que chaque colonne du DataRow existe et n'est pas DBNull.
Je recherche déjà DBNull mais je ne sais pas comment m'assurer que la colonne existe sans qu'elle ait à lever une exception ou à utiliser une fonction qui passe en boucle sur tous les noms de colonne. Quelle est la meilleure méthode pour le faire?
La solution
Les DataRow ont la gentillesse d’avoir leur table sous-jacente qui leur est liée. Avec la table sous-jacente, vous pouvez vérifier qu’une ligne spécifique contient une colonne spécifique.
If DataRow.Table.Columns.Contains("column") Then
MsgBox("YAY")
End If
Autres conseils
Vous pouvez utiliser DataSet.Tables (0) .Columns.Contains (name)
pour vérifier si le DataTable
contient une colonne portant un nom particulier.
Une autre façon de savoir s’il existe une colonne consiste à vérifier Nothing
la valeur renvoyée par l’indexeur de la collection Columns
lors de la transmission du nom de la colonne:
If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
MsgBox("YAY")
End If
Cette approche peut être préférée à celle qui utilise la méthode Contains (" ColumnName ")
lorsque le code suivant devra ensuite obtenir ce code DataColumn
pour une utilisation ultérieure. . Par exemple, vous voudrez peut-être 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 enregistre un appel au contient (" nom_colonne ")
en même temps, ce qui rend votre code un peu plus propre.
Vous pouvez encapsuler votre bloc de code avec une instruction try ... catch. Lorsque vous exécutez votre code, si la colonne n'existe pas, une exception est générée. Vous pouvez ensuite déterminer quelle exception elle est générée et lui demander de gérer cette exception de manière différente si vous le souhaitez, telle que le renvoi de "Column Not Found".