我正在将XML文件读入DataSet,需要从DataSet中获取数据。由于它是用户可编辑的配置文件,因此字段可能存在也可能不存在。为了更好地处理缺少的字段,我想确保DataRow中的每一列都存在且不是DBNull。
我已经检查了DBNull但是我不知道如何确保该列存在而不会抛出异常或使用循环遍历所有列名的函数。这样做的最佳方法是什么?
答案 0 :(得分:152)
DataRow在将它们的基础表链接到它们的方式上很不错。使用基础表,您可以验证特定行中是否包含特定列。
If DataRow.Table.Columns.Contains("column") Then
MsgBox("YAY")
End If
答案 1 :(得分:17)
您可以使用DataSet.Tables(0).Columns.Contains(name)
检查DataTable
是否包含具有特定名称的列。
答案 2 :(得分:2)
查明列是否存在的另一种方法是在将列名传递给Nothing
集合索引器时检查Columns
返回的值:
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 :(得分:-2)
您可以使用try ... catch语句封装代码块,并且在运行代码时,如果该列不存在,则会引发异常。然后,您可以找出它抛出的特定异常,并在需要时以不同的方式处理该特定异常,例如返回“未找到列”。