【问题标题】:Current item cannot be removed from the list because there is no current item当前项目无法从列表中删除,因为没有当前项目
【发布时间】:2021-12-25 18:02:59
【问题描述】:

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

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 的记录是否存在?

标签: sql-server vb.net


【解决方案1】:

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

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

命令和连接都需要被释放,因此它们应该在Using 块中本地声明。您永远不必检查ConnectionState,因为连接始终在使用它的方法中。无论在哪里声明了连接,都将其删除。

您可以将CommandTextConnection 直接传递给Command 的构造函数。 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

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多