如何检查Datarow中是否存在列

时间:2013-10-10 13:37:27

标签: vb.net

我试图在绑定之前检查数据行中是否存在列,但是column.contains属性不起作用。不知道我在这里失踪了什么。

以下是代码:

 Private Sub Bind(ByRef reader As SqlDataReader)
    Dim dt As DataTable = reader.GetSchemaTable

    list = New List(Of Employees)

    For Each r As DataRow In dt.Rows
        BindObject(r)
        list.Add(obj)
    Next

End Sub

Private Sub BindObject(ByRef dr As DataRow)
  obj = New Employees
  If dr.Table.Columns.Contains("ID") Then obj.VisitID = CType(dr("ID"), Integer) 
End Sub

解决方案:

@ajakblackgoat提供的以下解决方案绝对正常。

 If dt.Select("ColumnName='ID'").Count = 1 Then obj.VisitID = CType(dr("ID"), Integer)

我已经提出了其他两个解决方案,它可能会帮助其他人。

替代解决方案I:

    Dim dt As DataTable = reader.GetSchemaTable

    Dim columns = New List(Of String)()

    For i As Integer = 0 To reader.FieldCount - 1
        columns.Add(reader.GetName(i))
    Next

    If columns.Contains("ID") Then obj.ID = CType(dr("ID"), Integer)

替代解决方案II:

    Dim dt As New DataTable

    dt.Load(reader)

    If dr.Table.Columns.Contains("ID") Then obj.VisitID = CType(dr("ID"), Integer)

1 个答案:

答案 0 :(得分:1)

您的reader.GetSchemaTable会返回读者的所有列信息。所以你必须找到列名而不是列。

使用以下代码检查阅读器中是否存在列名:

Dim dt As DataTable = dr.GetSchemaTable

If dt.Select("ColumnName='ID'").Count = 1 Then
    ' column name exists
End If