Как сохранить строки одного столбца базы данных в массиве с помощью Windows Forms (vb.net) - PullRequest
1 голос
/ 12 марта 2019

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

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

Мой оператор выбора - Выбрать имя элемента из пункта меню. Я хочу поместить ItemName в массив текстового поля.

Весь код для чтения данных:

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Public Property TBMenuItemNameArray As TextBox
Private Sub Cashier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    GetItemName()
End Sub
Public Function GetItemName() As String()
    TBMenuItemNameArray = New TextBox
    Dim output As New List(Of String)()
    con.Open("Dsn=Invintory;uid=root")
    rs.Open("Select ItemName From menuitem", con, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
    output.Add(rs.GetString())
    rs.Close()
    con.Close()
    Dim ItemNameArray = Me.GetItemName()
    For Each item As String In ItemNameArray
        TBMenuItemNameArray.Text = item
        TableLayoutPanel1.Controls.Add(TBMenuItemNameArray)
    Next
    Return output.ToArray()
End Function

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вот краткий пример использования ADO.net. Вам нужно будет добавить пакет MySql nuget в ваш проект. Затем добавьте Imports MySql.Data.MySqlClient вверху файла кода.

Блоки Using...End Using обеспечивают закрытие и удаление объектов вашей базы данных даже в случае ошибки.

Ваш код создает одно TextBox с ключевым словом New и перезаписывает свойство .Text на каждой итерации; добавление одного и того же текстового поля на панель на каждой итерации.

Для отображения я просто добавил все строки ItemName в ListBox.

Поскольку вы не используете возвращаемое значение функции, я изменил его на Sub.

Private Sub Cashier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    GetItemName()
End Sub

Public Sub GetItemName()
    Dim dt As New DataTable
    Using cn As New MySqlConnection("Your connection string")
        Using cmd As New MySqlCommand("Select ItemName From menuitem", cn)
            cn.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
    End Using
    Dim arr As String() = dt.AsEnumerable().Select(Function(x) x.Field(Of String)("ItemName")).ToArray()
    ListBox2.Items.AddRange(arr)
End Sub
1 голос
/ 12 марта 2019

Я пытаюсь выбрать строковые значения из базы данных MySql и затем поместить их в массив строк

Хорошо

, чтобы я мог выполнитьОператор цикла в массиве.

Вам не нужен массив для записи цикла.Вы можете просто перебрать список output в этом коде, или вы можете сделать это:

Public Iterator Function GetItemName() As IEnumerable(Of String)
    Dim sql As String = "Select ItemName From menuitem"

    Using con As New MySqlConnection("Dsn=Invintory;uid=root"), _
          cmd As New MySqlCommand(sql, con)
        con.Open()
        Using rdr As MySqlDataReader = cmd.ExecuteReader()
             While rdr.Read()
                 Yield DirectCast(rdr("ItemName"), String)
             End While
        End Using
    End Using
End Function

И затем зациклить его так:

Private Sub Cashier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each item As String In GetItemName()
        Dim itemBox As New TextBox()
        itemBox.Name = item
        itemBox.Text = item
        'You may also want to set a location here

        TableLayoutPanel1.Controls.Add(itemBox)
    Next
End Sub

Или какэто:

Private Sub Cashier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim boxes = GetItemName().Select(Function(n) New TextBox With {.Text = n})
    TableLayoutPanel1.Controls.AddRange(boxes.ToArray())
End Sub

Еще лучше, если вы можете использовать элемент управления, который поддерживает привязку данных, например DataGridView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...