如何在DataRow中查找列是否存在?

62

我正在将一个XML文件读入到DataSet中,并需要从DataSet中获取数据。由于它是一个可编辑的配置文件,字段可能存在或不存在。为了很好地处理缺失字段,我想确保DataRow中的每个列都存在且不是DBNull。

我已经检查了DBNull,但我不知道如何确保该列存在而不使其抛出异常或使用循环所有列名的函数。最佳方法是什么?

4个回答

182

DataRow的好处在于它们与其基础表格相链接。通过这个基础表格,您可以验证特定行是否具有特定列。

    If DataRow.Table.Columns.Contains("column") Then
        MsgBox("YAY")
    End If

23

您可以使用DataSet.Tables(0).Columns.Contains(name)来检查DataTable是否包含特定名称的列。


4

另一种查找列是否存在的方法是通过检查Columns集合索引器传递列名时返回的值Nothing:

If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
    MsgBox("YAY")
End If

相比使用Contains("ColumnName")方法的方法,此方法可能更受欢迎,尤其是当后续代码需要获取该DataColumn进行进一步使用时。例如,您可能想知道哪种类型在列中存储了一个值:

Dim column = DataRow.Table.Columns("ColumnName")
If column IsNot Nothing Then
    Dim type = column.DataType
End If

在这种情况下,这种方法可以在不调用Contains("ColumnName")的情况下使您的代码更加简洁。

-3
你可以使用 try ... catch 语句来封装你的代码块,当你运行代码时,如果列不存在,它将抛出一个异常。然后你可以找出它抛出的具体异常,并在需要时以不同的方式处理该特定异常,例如返回 "Column Not Found"。

8
最好在不需要使用 try...catch 语句的情况下检查错误;该语句只应作为最后的选择。 - user82646
虽然这是不好的设计,但Anders是正确的,它可以工作。它可能不值得点赞,但肯定不应该被踩。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接