bgcwaterman Ответов: 1

Чтение нескольких строк данных в одно текстовое поле с помощью datareader.


Я не могу понять, что я делаю не так. Я пытаюсь прочитать несколько строк данных в одно и то же текстовое поле. Я использую Datareader. позвольте мне объяснить, что я пытаюсь сделать.

Я создаю раздел заметок/комментариев клиентов в своем приложении. Я хочу хранить заметки/комментарии о разговоре с клиентами. Я храню их вместе с датой и временем добавления комментария. Это хранится в базе данных Access. Я хочу получить данные и отобразить их в winform. Я выбрал многострочное текстовое поле. Я могу получить данные для отображения в текстовом поле, но он отображает только последнюю запись клиента, который имеет несколько записей.

Я не уверен, что это возможно, есть ли лучший способ или что я упускаю.

Что я уже пробовал:

Таблица CustomerNotes:

CusNumber Дата/Время Комментарий
1350 3/29/2019 8:52:42 утра клиент хочет вернуть деньги.
1376 23.08.2018 10:52:42 PM они были недовольны продуктом.
1350 4/4/2019 2:43:11 вечера мы выдали возврат денег.


Результат текстового поля, который я хочу:

29.03.2019 8:52:42
Клиент хочет вернуть деньги.

4/4/2019 2:43:11 вечера
Мы оформили возврат денег.

Мой код:
Try
            Dim command = New OleDb.OleDbCommand
            Call connection()
            Dim drCustomerNotes As OleDbDataReader = Nothing

            With cm
                .Connection = con
                .CommandText = "SELECT * FROM tblCusNotes WHERE fldCusNotesAcctNo = @CusAcctNo"
                Try
                    .Parameters.Clear()
                    .Parameters.Add("@CusAcctNo", OleDbType.Integer).Value = tbCusAcctNo.Text
                Catch ex As Exception
                    MsgBox(ex.Message, MsgBoxStyle.Critical)
                End Try
                drCustomerNotes = .ExecuteReader
            End With
            While drCustomerNotes.Read()

                CusNotesTemp = drCustomerNotes("fldCusNotesDateEntered").ToString
                    CusNotesTemp = CusNotesTemp + vbCrLf + drCustomerNotes("fldCusNotesText").ToString + vbCrLf
                tbCusNotes.Text = CusNotesTemp
                CusNotesfound = True
                End While

            'If CusNotesfound = True Then MsgBox("Cus Notes Info Found.", MsgBoxStyle.Information)
            If CusNotesfound = False Then MsgBox("Cus Notes Info Not Found.", MsgBoxStyle.Information)
            drCustomerNotes.Close()


Результат текстового поля, который я получаю с помощью приведенного выше кода:

4/4/2019 2:43:11 вечера
Мы оформили возврат денег.

Gerry Schmitz

tbCusNotes.Text = CusNotesTemp

Вы не объединяете текст текстового поля. Очистите его в начале цикла rdr; объедините во внутреннем цикле.

1 Ответов

Рейтинг:
11

Bryian Tan

Может быть, что-то вроде ниже? Переместите текстовое поле за пределы цикла, связав строку внутри цикла, а затем привяжите ее к текстовому полю. textbox

CusNotesTemp = ""
While drCustomerNotes.Read()

       ' CusNotesTemp = drCustomerNotes("fldCusNotesDateEntered").ToString
            CusNotesTemp = CusNotesTemp + drCustomerNotes("fldCusNotesDateEntered").ToString + vbCrLf + drCustomerNotes("fldCusNotesText").ToString + vbCrLf
       ' tbCusNotes.Text = CusNotesTemp
        CusNotesfound = True
        End While

tbCusNotes.Text = CusNotesTemp


Вы также можете попробовать объединить строку с классом StringBuilder.
Использование класса StringBuilder в .NET | Microsoft Docs[^]


bgcwaterman

Спасибо всем, что сделали свое дело. Я немного почитал о StringBuilder, и это то, что мне нужно использовать. Я внесу это в Кодекс. Спасибо снова...