Como faço para descobrir se uma coluna existe em um VB.Net DataRow
Pergunta
Estou lendo um arquivo XML em um DataSet e necessidade de obter os dados do DataSet. Uma vez que é um arquivo de configuração editável pelo usuário os campos podem ou não estar lá. Para lidar bem campos faltando eu gostaria de certificar-se de cada coluna no DataRow existe e não é DBNull.
Já verificar DBNull mas eu não sei como se certificar que a coluna existe sem ter que lançar uma exceção ou usando uma função que faz um loop sobre todos os nomes das colunas. Qual é o melhor método para fazer isso?
Solução
O DataRow são agradáveis ??na maneira que eles têm a sua tabela subjacente ligados a eles. Com a tabela subjacente é possível verificar que uma linha específica tem uma coluna específica na mesma.
If DataRow.Table.Columns.Contains("column") Then
MsgBox("YAY")
End If
Outras dicas
Você pode usar DataSet.Tables(0).Columns.Contains(name)
para verificar se o DataTable
contém uma coluna com um nome específico.
Outra maneira de descobrir se uma coluna existe é para verificar se há Nothing
o valor retornado do indexador coleção Columns
ao passar o nome da coluna a ele:
If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
MsgBox("YAY")
End If
Esta abordagem pode ser preferido sobre aquele que usa o método Contains("ColumnName")
quando o seguinte código será posteriormente necessário obter essas DataColumn
para posterior utilização. Por exemplo, você pode querer saber que tipo tem um valor armazenado na coluna:
Dim column = DataRow.Table.Columns("ColumnName")
If column IsNot Nothing Then
Dim type = column.DataType
End If
Neste caso, esta abordagem poupa-lhe uma chamada para o Contains("ColumnName")
ao mesmo tempo fazendo o seu código um pouco mais limpo.
Você pode encapsular o bloco de código com um try ... catch instrução, e quando você executar seu código, se a coluna não existir, ele irá lançar uma exceção. Você pode, então, descobrir o que exceção específica lança e tê-lo lidar com essa exceção específica de uma maneira diferente, se assim desejar, como retornando "Column not found".