Проверьте наличие столбца в DataReader ИЛИ не прерывайте отладчик при определенных исключениях.

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top