Check for existence of column in DataReader OR not make debugger break on certain exceptions

10,972

Solution 1

Yes, you can use the GetSchemaTable() method of the datareader to get a list of columns, then you can see if that column exists.

You might find this very similar question helpful.

Solution 2

I would simply use GetOrdinal() at the start of the loop to find the column indexes first (and store in a variable). Then just check whether it is >=0. This has the advantage of improving performance too (as long as you then use this integer for all access, not the name).

And no, there is no elegant way of ignoring a particular exception. You could catch and swallow, but that is not a good approach.

Share:
10,972
Adam
Author by

Adam

Updated on June 05, 2022

Comments

  • Adam
    Adam about 2 years

    I have code that looks like:

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

    I don't know if the consolidated column will be present in the datareader, so I do that to check. It works fine (is a little hackish, though).

    When I attach a debugger though, it breaks on that whenever it throws the exception however. Extremely annoying.

    Is there a better way to write that code; or is there some Visual Studio way of telling it to ignore the exception and not break (but only right here; not everywhere).

  • Adam
    Adam over 15 years
    I had to cast the interface; but this worked well. I couldn't use GetOrdinal as this threw the same exception I was trying to avoid.
  • nawfal
    nawfal over 10 years
    I don't think this works. Columns here is a different collection, not a collection of fields of result set.
  • Chad
    Chad almost 9 years
    @nawfal confirmed, this is not a solution.
  • James Roeiter
    James Roeiter almost 8 years
    SchemaTable is not the table the DataReader refers to , over 8 years has passed but this page still pop up in Google when asking this question.