Come faccio a sapere se esiste una colonna in un DataBow VB.Net
Domanda
Sto leggendo un file XML in un DataSet e devo estrarre i dati dal DataSet. Poiché si tratta di un file di configurazione modificabile dall'utente, i campi potrebbero essere presenti o meno. Per gestire bene i campi mancanti, vorrei assicurarmi che ogni colonna nel DataRow esista e non sia DBNull.
Cerco già DBNull ma non so come assicurarmi che la colonna esista senza che abbia generato un'eccezione o usando una funzione che scorre su tutti i nomi di colonna. Qual è il metodo migliore per farlo?
Soluzione
I DataRow sono belli nel modo in cui hanno la loro tabella sottostante collegata a loro. Con la tabella sottostante puoi verificare che una riga specifica contenga una colonna specifica.
If DataRow.Table.Columns.Contains("column") Then
MsgBox("YAY")
End If
Altri suggerimenti
Puoi usare DataSet.Tables (0) .Columns.Contains (nome)
per verificare se DataTable
contiene una colonna con un nome particolare.
Un altro modo per scoprire se esiste una colonna è verificare Nothing
il valore restituito dall'indicizzatore di raccolta Columns
quando si passa il nome della colonna:
If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
MsgBox("YAY")
End If
Questo approccio potrebbe essere preferito rispetto a quello che utilizza il metodo Contains (" ColumnName ")
quando il seguente codice dovrà successivamente ottenere quel DataColumn
per ulteriore utilizzo . Ad esempio, potresti voler sapere quale tipo ha un valore memorizzato nella colonna:
Dim column = DataRow.Table.Columns("ColumnName")
If column IsNot Nothing Then
Dim type = column.DataType
End If
In questo caso questo approccio ti consente di risparmiare una chiamata a Contiene (" ColumnName ")
rendendo il tuo codice un po 'più pulito.
Puoi incapsulare il tuo blocco di codice con un'istruzione try ... catch e, quando esegui il tuo codice, se la colonna non esiste genererà un'eccezione. Puoi quindi capire quale eccezione specifica viene generata e gestirla in modo diverso se lo desideri, ad esempio restituendo " Column Not Found " ;.