1

こんにちは私は次の機能を持っています:

    Public Shared Function GetAbrechnung() As List(Of WochenBPlan)


        Dim wbp = New WochenBPlan
        Dim allBookings As List(Of WochenBPlan) = New List(Of WochenBPlan)

        Dim strSQL As String = "SELECT DISTINCT d.ABTEILUNG, d.BEMERKUNG, d.BESTUHLUNG, d.RAUMID, d.ID, d.PERSONENZAHL, d.ADRESSE + ', ' + d.RAUMBEZEICHNUNG AS RAUMBEZEICHNUNG, d.THEMA, p.VN + ' ' + p.NN AS NAME, CONVERT (char(5), d.VON, 108) + ' - ' + CONVERT (char(5), d.BIS, 108) AS ZEIT, p.TEL FROM VIEW_RAUMBUCHUNG_DISPO AS d INNER JOIN PERSONAL AS p ON d.PERSONAL_ID = p.ID WHERE THEMA = 'EVENT'"
        Dim objRS As SqlDataReader

        objRS = SQLrunReaderWB(strSQL)
        If objRS.HasRows Then

            While objRS.Read()

                wbp.Raum = objRS("RAUMBEZEICHNUNG")
                wbp.Zeit = objRS("ZEIT")

                If Not IsDBNull(objRS("ABTEILUNG")) Then
                    wbp.Bereich = objRS("ABTEILUNG")
                End If

                If Not IsDBNull(objRS("THEMA")) Then
                    wbp.Thema = objRS("THEMA")
                End If

                If Not IsDBNull(objRS("NAME")) Then
                    wbp.Mieter = objRS("NAME")
                End If

                If Not IsDBNull(objRS("TEL")) Then
                    wbp.Mieter_Tel = objRS("TEL")
                End If

                wbp.Personen = objRS("PERSONENZAHL")
                wbp.Bestuhlung = objRS("BESTUHLUNG")

                If Not IsDBNull(objRS("BEMERKUNG")) Then
                    wbp.Bemerkung = objRS("BEMERKUNG")
                End If



                allBookings.Add(wbp)


            End While


        Else

        End If

        ConnWB.Close()
        Return allBookings

End Function

私の問題は、私が生成したリストが最後の値を返すだけであることです。何が間違っているのですか?誰か助けてくれませんか?

4

2 に答える 2

2

ループ内でスコープ オブジェクトを宣言する必要があります。そうしないと、同じオブジェクトの参照のみが取得され、それが変更されるため、リストを含む最後の変更になります。

このようなことを試してください:

Public Shared Function GetAbrechnung() As List(Of WochenBPlan)

        Dim allBookings As List(Of WochenBPlan) = New List(Of WochenBPlan)

        Dim strSQL As String = "SELECT DISTINCT d.ABTEILUNG, d.BEMERKUNG, d.BESTUHLUNG, d.RAUMID, d.ID, d.PERSONENZAHL, d.ADRESSE + ', ' + d.RAUMBEZEICHNUNG AS RAUMBEZEICHNUNG, d.THEMA, p.VN + ' ' + p.NN AS NAME, CONVERT (char(5), d.VON, 108) + ' - ' + CONVERT (char(5), d.BIS, 108) AS ZEIT, p.TEL FROM VIEW_RAUMBUCHUNG_DISPO AS d INNER JOIN PERSONAL AS p ON d.PERSONAL_ID = p.ID WHERE THEMA = 'EVENT'"
        Dim objRS As SqlDataReader

        objRS = SQLrunReaderWB(strSQL)
        If objRS.HasRows Then

            While objRS.Read()

                'declare here a new instance to add on the list
                Dim wbp = New WochenBPlan

                wbp.Raum = objRS("RAUMBEZEICHNUNG")
                wbp.Zeit = objRS("ZEIT")

                If Not IsDBNull(objRS("ABTEILUNG")) Then
                    wbp.Bereich = objRS("ABTEILUNG")
                End If

                If Not IsDBNull(objRS("THEMA")) Then
                    wbp.Thema = objRS("THEMA")
                End If

                If Not IsDBNull(objRS("NAME")) Then
                    wbp.Mieter = objRS("NAME")
                End If

                If Not IsDBNull(objRS("TEL")) Then
                    wbp.Mieter_Tel = objRS("TEL")
                End If

                wbp.Personen = objRS("PERSONENZAHL")
                wbp.Bestuhlung = objRS("BESTUHLUNG")

                If Not IsDBNull(objRS("BEMERKUNG")) Then
                    wbp.Bemerkung = objRS("BEMERKUNG")
                End If


                ' add the reference to the new object on the list
                allBookings.Add(wbp)    

            End While    

        'Else ---> you do not need this ELSE scope, just remove it

        End If

        ConnWB.Close()

        Return allBookings

End Function
于 2012-12-20T22:50:17.727 に答える
2

各ループ反復で WochenBPlan の新しいインスタンスを作成する必要があります。それ以外の場合は、以前に設定した値を置き換えるだけです。これをループに追加します。

wbp = New WochenBPlan()
于 2012-12-20T22:51:04.947 に答える