无法从列表中删除当前项目,因为没有当前项目

Current item cannot be removed from the list because there is no current item

我写了这段代码来删除选定的记录:

Dim Str As String = "DELETE FROM TableName WHERE ID=" & IDTextBox.Text & ""
        Dim cmd As New SqlCommand
        If Sqlcon.State = ConnectionState.Open Then Sqlcon.Close()
        Sqlcon.Open()
        With cmd
            .Connection = Sqlcon
            .CommandType = CommandType.Text
            .CommandText = Str
            .ExecuteNonQuery()
            .Dispose()
        End With
        Sqlcon.Close()

但是我得到这个错误: (当前项目无法从列表中删除,因为没有当前项目)

我找不到问题!

您需要验证文本框中的输入以确保它是一个数字。 (我猜 ID 字段是一个数字)TryParse 将 return TrueFalse 如果 True 它将用数字填充第二个参数。

最好将数据库代码与用户界面代码分开。

命令和连接都需要处理,因此它们应该在 Using 中本地声明 block.You 永远不必检查 ConnectionState 因为连接总是在方法中它被使用了。在别处声明连接的地方,删除它。

您可以将 CommandTextConnection 直接传递给命令的构造函数。 CommandType.Text 是默认值,因此您没有明确分配它。

为避免 sql 注入并确保向服务器提供正确的类型 始终 使用参数。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Id As Integer
    If Integer.TryParse(IDTextBox.Text, Id) Then
        DeleteRecord(Id)
    Else
        MessageBox.Show("Please enter a valid ID")
    End If
End Sub

Private OPConStr As String = "Your connection string."

Private Sub DeleteRecord(id As Integer)
    Dim Str As String = "DELETE FROM TableName WHERE ID= @ID;"
    Using SqlCon As New SqlConnection(OPConStr),
            cmd As New SqlCommand(Str, SqlCon)
        cmd.Parameters.Add("@ID", SqlDbType.Int).Value = id
        SqlCon.Open()
        cmd.ExecuteNonQuery()
    End Using 'disposes the command and closes and disposes the connection
End Sub