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

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

有帮助吗?

解决方案

DataRow在将它们的基础表链接到它们的方式上很不错。使用基础表,您可以验证特定行中是否包含特定列。

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

其他提示

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

查明列是否存在的另一种方法是在将列名称传递给 Columns 集合索引器时,检查 Nothing 返回的值:

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

当以下代码随后需要获取 DataColumn 以供进一步使用时,此方法可能优于使用 Contains(" ColumnName")方法的方法。例如,您可能想知道哪个类型的值存储在列中:

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

在这种情况下,这种方法可以节省您对 Contains(" ColumnName")的调用,同时使您的代码更清晰。

您可以使用try ... catch语句封装代码块,并且在运行代码时,如果该列不存在,则会引发异常。然后,您可以找出它抛出的特定异常,并在需要时以不同的方式处理该特定异常,例如返回“未找到列”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top