我正在将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 是否包含具有特定名称的列 .
DataSet.Tables(0).Columns.Contains(name)
DataTable
查明列是否存在的另一种方法是检查 Nothing 在将列名称传递给 Columns 集合索引器时返回的值:
Nothing
Columns
If dataRow.Table.Columns("ColumnName") IsNot Nothing Then MsgBox("YAY") End If
当以下代码随后需要获取 DataColumn 以供进一步使用时,此方法可能优于使用 Contains("ColumnName") 方法的方法 . 例如,您可能想知道哪个类型的值存储在列中:
DataColumn
Contains("ColumnName")
Dim column = DataRow.Table.Columns("ColumnName") If column IsNot Nothing Then Dim type = column.DataType End If
在这种情况下,这种方法可以节省您对 Contains("ColumnName") 的调用,同时使您的代码更清晰 .
您可以使用try ... catch语句封装代码块,并且在运行代码时,如果该列不存在,则会引发异常 . 然后,您可以找出它抛出的特定异常,并在需要时以不同的方式处理该特定异常,例如返回“Column Not Found” .
4 回答
DataRow的表现非常好,因为它们将基础表链接到它们 . 使用基础表,您可以验证特定行中是否包含特定列 .
您可以使用
DataSet.Tables(0).Columns.Contains(name)
来检查DataTable
是否包含具有特定名称的列 .查明列是否存在的另一种方法是检查
Nothing
在将列名称传递给Columns
集合索引器时返回的值:当以下代码随后需要获取
DataColumn
以供进一步使用时,此方法可能优于使用Contains("ColumnName")
方法的方法 . 例如,您可能想知道哪个类型的值存储在列中:在这种情况下,这种方法可以节省您对
Contains("ColumnName")
的调用,同时使您的代码更清晰 .您可以使用try ... catch语句封装代码块,并且在运行代码时,如果该列不存在,则会引发异常 . 然后,您可以找出它抛出的特定异常,并在需要时以不同的方式处理该特定异常,例如返回“Column Not Found” .