Verifique se há existência de coluna no DataReader ou não fazer pausa depurador em determinadas exceções

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

  •  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).

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top