如何确定 VB.Net DataRow 中是不是存在列

Posted

技术标签:

【中文标题】如何确定 VB.Net DataRow 中是不是存在列【英文标题】:How do I find out if a column exists in a VB.Net DataRow如何确定 VB.Net DataRow 中是否存在列 【发布时间】:2010-09-15 18:37:19 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

DataRow 的优点在于它们将基础表链接到它们。使用基础表,您可以验证特定行中是否包含特定列。

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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") 的调用,同时使您的代码更简洁。

【讨论】:

【参考方案4】:

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

【讨论】:

最好不要使用 try...catch 块来检查错误;它只能作为最后的手段。 虽然这是一个糟糕的设计,但安德斯是正确的,它会起作用。它可能不值得投赞成票,但肯定不值得投反对票。

以上是关于如何确定 VB.Net DataRow 中是不是存在列的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 VB.NET ListView 是不是正在向用户显示垂直滚动条

vb.net如何查询DataGridView中数据,然后把查询到的内容显示到listview中

C#中的List<类名> 怎么理解?如把Datarow dr[0]=List<类名> 这怎么理解?

vb.net怎么从DataSet中读取一行的数据

vb.net 4.5 中的 Zipfile “目录名无效。”错误 - 无法确定原因?

在vb net中,如何猎取和修改已选定的某一项的值?