none
我发现了我的combo box, 当user想要继续删除data时却无法删除成功 RRS feed

  • 问题

  • 我篇写了有关通过combo box add数据 和 delete 数据。我遇到的问题是,我的代码只允许我delete数据1次。接下来就无法delete数据了除非application restart

    我尝试了以下代码

    coddelete.Parameters.AddWithValue("@ID", ComboBox1.SelectedItem.ToString())

    和以下代码

     coddelete.Parameters.AddWithValue("@Category", ComboBox1.SelectedItem) 此代码会出现multi step error message

    我的完整代码是

    add 数据的代码

    Dim da As New OleDbDataAdapter
            Dim dt As New DataTable
            cnn.Open()

            Try
                Dim codinsert As New OleDbCommand
                codinsert.Connection = cnn
                codinsert.CommandText = "INSERT INTO tbl_Category ([Category])" &
            "VALUES('" & Me.ComboBox1.Text & "')"

                'Trim'
                If ComboBox1.Text.Trim = "" Then
                    MessageBox.Show("Please Insert Text", "Error Message")
                    Exit Sub
                End If
                'Trim'
                codinsert.ExecuteNonQuery()
                MsgBox("Save data successful", MsgBoxStyle.Information, "Message")

            Catch ex As Exception
                MsgBox(ex.Message.ToString)
            End Try

            da.SelectCommand = New OleDbCommand("select * from tbl_Category", cnn)
            da.Fill(dt)
            ComboBox1.DataSource = (dt)
            ComboBox1.DisplayMember = "Category"
            Me.Button2.PerformClick()
            cnn.Close()
        End Sub

    delete 数据的代码

    Dim da As New OleDbDataAdapter
            Dim dt As New DataTable
            cnn.Open()

            Try
                Dim coddelete As New OleDbCommand
                coddelete.Connection = cnn
                coddelete.CommandText = "DELETE FROM tbl_Category WHERE Category = @Category;"
                'coddelete.Parameters.AddWithValue("@Category", ComboBox1.SelectedItem)
                coddelete.Parameters.AddWithValue("@ID", ComboBox1.SelectedItem.ToString())

                coddelete.ExecuteNonQuery()
                MsgBox("Delete data successful", MsgBoxStyle.Information, "Message")

            Catch ex As Exception
                MsgBox(ex.Message.ToString)
            End Try

            da.SelectCommand = New OleDbCommand("select * from tbl_Category", cnn)
            da.Fill(dt)
            ComboBox1.DataSource = (dt)
            ComboBox1.DisplayMember = "Category"
            Me.Button2.PerformClick()
            cnn.Close()
            RefreshData()
        End Sub

    请指教 感恩


    2020年6月9日 7:39

答案

  • Hi christing,

    问题可能是由于Combobox引起的,由于Combobox绑定了DataTable,并且定义了 ValueMember, 所以ComboBox1.SelectedValue 可以得到你选中的值,而一旦 Combobox没有绑定DataTable以及定义 ValueMember,那么 ComboBox1.SelectedValue 就得不到值,所以就会引发异常。

    为了解决这个问题,你需要在 delete 数据之前,先定义好 Combobox的绑定以及 ValueMember, 也就是说 add数据要先于 delete 数据的操作。

    另外你也可以将Combobox的绑定操作定义到 Form.Load 事件中,这样一开始就可以绑定好。

    Best Regards,

    Xingyu Zhao


     

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2020年6月10日 8:08
    版主

全部回复

  • Hi christing,

    根据你提供的代码,我进行了测试并做了些修改,然后可以成功的删除数据。

    在 add 数据的代码中我添加了一行:

            '...
            ComboBox1.DataSource = (dt)
            ComboBox1.DisplayMember = "Category"
            ComboBox1.ValueMember = "Category"
            '...

    然后在 delete 代码中,我修改了 coddelete.Parameters.AddWithValue 部分:

                '...
                coddelete.CommandText = "DELETE FROM tbl_Category WHERE Category = @Category;"
                coddelete.Parameters.AddWithValue("@Category", ComboBox1.SelectedValue.ToString)
                '...

    希望可以帮助你解决问题。另外,由于我的测试中没有触发 button2 的操作,如果后续还存在问题,你可以提供更多的代码细节。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2020年6月10日 2:17
    版主
  • @xing yu zhao

    感谢你的回复

    coddelete.CommandText = "DELETE FROM tbl_Category WHERE Category = @Category;"
    coddelete.Parameters.AddWithValue("@Category", ComboBox1.SelectedValue.ToString)

    delete data的代码有时会出现这个error message

    不过这个error message 出现后就会好回。hmmmm....奇怪

    2020年6月10日 6:46
  • Hi christing,

    问题可能是由于Combobox引起的,由于Combobox绑定了DataTable,并且定义了 ValueMember, 所以ComboBox1.SelectedValue 可以得到你选中的值,而一旦 Combobox没有绑定DataTable以及定义 ValueMember,那么 ComboBox1.SelectedValue 就得不到值,所以就会引发异常。

    为了解决这个问题,你需要在 delete 数据之前,先定义好 Combobox的绑定以及 ValueMember, 也就是说 add数据要先于 delete 数据的操作。

    另外你也可以将Combobox的绑定操作定义到 Form.Load 事件中,这样一开始就可以绑定好。

    Best Regards,

    Xingyu Zhao


     

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2020年6月10日 8:08
    版主
  • @Xing Yu Zhao

    感谢你的答复。问题解决了

    2020年6月11日 2:44