Проверьте наличие столбца в DataReader ИЛИ не прерывайте отладчик при определенных исключениях.
-
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