Verificare l'esistenza della colonna in DataReader O non interrompere il debugger su determinate eccezioni

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un codice simile a:

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

Non so se la colonna consolidata sarà presente nel datareader, quindi lo faccio per controllare. Funziona bene (è un po 'di hacking, però).

Quando allego un debugger, però, si interrompe ogni volta che genera l'eccezione. Estremamente fastidioso.

C'è un modo migliore per scrivere quel codice; o c'è un modo Visual Studio per dirgli di ignorare l'eccezione e non rompere (ma solo qui; non ovunque).

È stato utile?

Soluzione

Sì, puoi usare il metodo GetSchemaTable () del datareader per ottenere un elenco di colonne, quindi puoi vedere se quella colonna esiste.

Potresti trovare questa domanda molto simile utile.

Altri suggerimenti

Vorrei semplicemente usare GetOrdinal () all'inizio del ciclo per trovare prima gli indici di colonna (e archiviarli in una variabile). Quindi controlla se è > = 0 . Ciò ha anche il vantaggio di migliorare le prestazioni (purché utilizzi questo numero intero per tutti gli accessi, non il nome).

E no, non esiste un modo elegante di ignorare una particolare eccezione. Potresti catturare e deglutire, ma non è un buon approccio.

Puoi semplicemente usare il seguente codice:

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

Questo restituirà un valore booleano.

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top