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?

Foi útil?

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".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top