Проверьте наличие столбца в DataReader ИЛИ не прерывайте отладчик при определенных исключениях - PullRequest
3 голосов
/ 31 декабря 2008

У меня есть код, который выглядит следующим образом:

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

Я не знаю, будет ли консолидированный столбец присутствовать в хранилище данных, поэтому я делаю это для проверки. Он отлично работает (хотя и немного хакерский).

Однако, когда я присоединяю отладчик, он срабатывает при каждом исключении. Чрезвычайно раздражает.

Есть ли лучший способ написать этот код; или есть какой-то способ Visual Studio сказать ему игнорировать исключение и не прерывать (но только здесь; не везде).

Ответы [ 3 ]

2 голосов
/ 31 декабря 2008

Я бы просто использовал GetOrdinal() в начале цикла, чтобы сначала найти индексы столбцов (и сохранить в переменной). Тогда просто проверьте, является ли это >=0. Это также имеет преимущество в улучшении производительности (если вы затем используете это целое число для всех обращений, а не для имени).

И нет, не существует элегантного способа игнорировать конкретное исключение. Вы можете ловить и глотать, но это не очень хороший подход.

2 голосов
/ 31 декабря 2008

Да, вы можете использовать метод GetSchemaTable () устройства чтения данных, чтобы получить список столбцов, и тогда вы сможете увидеть, существует ли этот столбец.

Вы можете найти этот очень похожий вопрос полезным.

0 голосов
/ 07 мая 2009

Вы можете просто использовать следующий код:

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

Это вернет логическое значение.

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...