Vérifier l'existence d'une colonne dans DataReader OU ne pas interrompre le débogueur pour certaines exceptions

StackOverflow https://stackoverflow.com/questions/403215

  •  03-07-2019
  •  | 
  •  

Question

J'ai un code qui ressemble à:

  //System.Data.IDataRecord dr
  try
  {
       Consolidated = Utility.NullConvert.ToBool(dr[Constants.Data.Columns.cConsolidated], false);
  }
  catch (IndexOutOfRangeException) { } //swallow

Je ne sais pas si la colonne consolidée sera présente dans le datareader, je le fais donc pour vérifier. Cela fonctionne bien (est un peu hackish, cependant).

Cependant, lorsque j'attache un débogueur, il se déclenche chaque fois qu'il lève l'exception. Extrêmement agaçant.

Existe-t-il un meilleur moyen d'écrire ce code? ou y a-t-il une manière de Visual Studio de lui dire d'ignorer l'exception et de ne pas casser (mais seulement ici; pas partout).

Était-ce utile?

La solution

Oui, vous pouvez utiliser la méthode GetSchemaTable () du datareader pour obtenir une liste de colonnes, puis vous pouvez voir si cette colonne existe.

Vous pouvez trouver cette question très similaire utile.

Autres conseils

Je voudrais simplement utiliser GetOrdinal () au début de la boucle pour rechercher d’abord les index de colonnes (et les stocker dans une variable). Ensuite, vérifiez si > = 0 . Cela présente également l'avantage d'améliorer les performances (tant que vous utilisez ensuite cet entier pour tous les accès, pas le nom).

Et non, il n’existe aucun moyen élégant d’ignorer une exception particulière. Vous pouvez attraper et avaler, mais ce n'est pas une bonne approche.

Vous pouvez simplement utiliser le code suivant:

reader.GetSchemaTable().Columns.Contains("Your_Column")

Ceci retournera un booléen.

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top