0

バインドする前にデータ行に列が存在するかどうかを確認しようとしていますが、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)

私は他の2つの解決策を思いついたので、他の人に役立つかもしれません.

代替ソリューション 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)
4

1 に答える 1