Vérifier l'existence de la colonne dans DataReader OU de ne pas faire de saut de débogueur sur certaines exceptions
J'ai un code qui ressemble à ceci:
//System.Data.IDataRecord dr
try
{
Consolidated = Utility.NullConvert.ToBool(dr[Constants.Data.Columns.cConsolidated], false);
}
catch (IndexOutOfRangeException) { } //swallow
Je ne sais pas si les états de la colonne sera présent dans le datareader, alors je le fais pour vérifier. Il fonctionne très bien (c'est un peu hackish, tout de même).
Quand j'attacher un débogueur cependant, il se casse à chaque fois qu'il lève l'exception toutefois. Extrêmement ennuyeux.
Est-il une meilleure façon d'écrire ce code; ou est-il une Visual Studio manière de la raconter à ignorer l'exception et ne pas le casser (mais seulement à droite ici, pas partout).
OriginalL'auteur Tom Ritter | 2008-12-31
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez utiliser le GetSchemaTable() la méthode de l ' objet datareader pour obtenir une liste de colonnes, vous pouvez voir si cette colonne existe.
Vous pourriez trouver cette question très semblable utile.
SchemaTable est pas sur la table le DataReader se réfère , plus de 8 ans ont passé, mais cette page toujours pop up dans Google quand vous posez cette question.
OriginalL'auteur Mitchel Sellers
Je voudrais simplement utiliser
GetOrdinal()
au début de la boucle pour trouver l'index de colonne de la première (et la stocker dans une variable). Ensuite il suffit de vérifier s'il est>=0
. Ceci a l'avantage de l'amélioration de la performance (aussi longtemps que vous utilisez ensuite cet entier pour tous les accès, ne pas la nommer).Et non, il n'y a pas de manière élégante d'ignorer une exception particulière. Vous pourriez attraper et à avaler, mais ce n'est pas une bonne approche.
OriginalL'auteur Marc Gravell
Vous pouvez simplement utiliser le code suivant:
Cela renvoie un booléen.
Columns
ici est une collection différente, n'est pas une collection de champs de l'ensemble de résultats.confirmé, ce n'est pas une solution.
OriginalL'auteur Kevin Dark