Verifique la existencia de una columna en el DataReader O no haga interrupciones del depurador en ciertas excepciones

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un código que parece:

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

No sé si la columna consolidada estará presente en el datareader, así que hago eso para verificar. Funciona bien (aunque es un poco trillado).

Sin embargo, cuando adjunto un depurador, se interrumpe cuando se produce la excepción. Extremadamente molesto.

¿Hay una mejor manera de escribir ese código; o hay alguna forma de Visual Studio de decirle que ignore la excepción y no la rompa (pero solo aquí, no en todas partes).

¿Fue útil?

Solución

Sí, puede usar el método GetSchemaTable () del datareader para obtener una lista de columnas, luego puede ver si esa columna existe.

Puede encontrar esta pregunta muy similar útil.

Otros consejos

Simplemente usaría GetOrdinal () al comienzo del ciclo para encontrar los índices de columna primero (y almacenar en una variable). Luego, simplemente comprueba si es > = 0 . Esto también tiene la ventaja de mejorar el rendimiento (siempre y cuando utilice este número entero para todos los accesos, no el nombre).

Y no, no hay una forma elegante de ignorar una excepción particular. Podría atrapar y tragar, pero eso no es un buen enfoque.

Simplemente puedes usar el siguiente código:

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

Esto devolverá un booleano.

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top