Verifique se há existência de coluna no DataReader ou não fazer pausa depurador em determinadas exceções
-
03-07-2019 - |
Pergunta
Eu tenho o código que se parece com:
//System.Data.IDataRecord dr
try
{
Consolidated = Utility.NullConvert.ToBool(dr[Constants.Data.Columns.cConsolidated], false);
}
catch (IndexOutOfRangeException) { } //swallow
Eu não sei se a coluna consolidado estará presente na datareader, então eu fazer isso para verificar. Ele funciona muito bem (é um pouco hackish, embora).
Quando eu anexar um depurador, porém, ele quebra em que sempre que lança a exceção no entanto. Extremamente irritante.
Existe uma maneira melhor para escrever esse código; ou existe alguma forma Visual Studio de dizer a ele para ignorar a exceção e não quebrar (mas só aqui, não em todos os lugares).
Solução
Sim, você pode usar o método GetSchemaTable () do datareader para obter uma lista de colunas, então você pode ver se existe essa coluna.
Você pode achar esta pergunta muito semelhante útil.
Outras dicas
Eu simplesmente usar GetOrdinal()
no início do loop para encontrar os índices de coluna primeira (e armazenar em uma variável). Em seguida, basta verificar se é >=0
. Isto tem a vantagem de melhorar o desempenho também (contanto que você, em seguida, usar esse número inteiro para todos os acessos, não o nome).
E não, não há nenhuma maneira elegante de ignorar uma exceção particular. Você poderia pegar e engolir, mas isso não é uma boa abordagem.
Você pode simplesmente usar o código a seguir:
reader.GetSchemaTable().Columns.Contains("Your_Column")
Isso irá retornar um booleano.
If reader.GetSchemaTable().Columns.Contains("ContactID") Then
' Do something
End If