我试图在绑定之前检查数据行中是否存在列,但是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)
答案 0 :(得分:1)
您的reader.GetSchemaTable
会返回读者的所有列信息。所以你必须找到列名而不是列。
使用以下代码检查阅读器中是否存在列名:
Dim dt As DataTable = dr.GetSchemaTable
If dt.Select("ColumnName='ID'").Count = 1 Then
' column name exists
End If