使用vb.net删除记录和数据读取的问题

时间:2015-02-18 23:08:07

标签: vb.net

我对编程非常陌生,而且我在第一个vb.net编程任务的最后阶段,但我无法理解最后一部分。

该程序是一个带有数据库后端的小型地址簿,当我删除联系人记录时出现问题。 正在读取的数据记录基于联系人主键,当我删除联系人记录时,下一个联系人记录向上移动但是其下的每个记录都没有正确读取。

我有一种感觉,因为我的代码只按顺序读取主键,但我不确定如何更改它以使其正常工作。

这里是与我在列表视图中选择记录时读取数据相关的代码。

Private Sub ListView1_SelectedIndexChanged_1(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
    Dim command As MySqlCommand = Nothing
    Dim reader As MySqlDataReader
    Dim query As String = "SELECT * FROM contacts WHERE id= '" & ListView1.FocusedItem.Index + 1 & "'"

    Try
        connection.Open()
        command = New MySqlCommand(query, connection)
        reader = command.ExecuteReader
        While reader.Read
            txtFirstName.Text = reader.GetString("first_name")
            txtSurname.Text = reader.GetString("surname")
            txtHouseNo.Text = reader.GetString("house_number")
            txtStreet.Text = reader.GetString("street")
            txtSuburb.Text = reader.GetString("suburb")
            cboState.Text = reader.GetString("state")
            txtPhone.Text = reader.GetString("phone")
            txtMobile.Text = reader.GetString("mobile")
            txtWork.Text = reader.GetString("work")
            txtEmail.Text = reader.GetString("email")
            txtNotes.Text = reader.GetString("notes")
            txtid.Text = reader.GetString("id")
        End While

    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    Finally
        connection.Close()
        command.Dispose()
    End Try
    Call txtEnable()
End Sub

以下是我如何将联系人加载到listview

Private Sub loadcontacts()
    Dim command As MySqlCommand = Nothing
    Dim listquery As String = "SELECT * FROM contacts ORDER BY id"
    Dim reader As MySqlDataReader = Nothing

    Try
        If connection.State = ConnectionState.Closed Then
            connection.Open()
        End If

        command = New MySqlCommand(listquery, connection)
        reader = command.ExecuteReader()
        command.CommandText = listquery

        With ListView1
            .Columns.Add("Name", 220, HorizontalAlignment.Left)

        End With

        ListView with the data
        While reader.Read
            Dim ls As New ListViewItem(reader.Item("first_name").ToString() & " " & reader.Item("surname").ToString)
            ListView1.Items.Add(ls)
        End While

    Catch ex As MySqlException
    Finally
        connection.Close()
        command.Dispose()
    End Try

End Sub

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

删除记录后,请清除并重新加载列表。

答案 1 :(得分:0)

对于任何有类似问题的人,我都知道了。 史蒂夫帮助我走上了正确的轨道,谢谢你。 我添加了ID(主键)子项,如下所示:

While reader.Read
            Dim ls As New ListViewItem(reader.Item("first_name").ToString() & " " & reader.Item("surname").ToString)
            ls.SubItems.Add(reader.Item("id").ToString)
            ListView1.Items.Add(ls)

然后在listview焦点项目中我做了这样的查询:

Dim query As String = "SELECT * FROM contacts WHERE id = '" & ListView1.FocusedItem.SubItems(1).Text & "'"

现在以正确的顺序保存,更新和删除主键ID读取的工作。感谢您的帮助,我希望这有助于将来的某个人