VB SQL DELETE 语句不起作用 - 完全没有错误

VB SQL DELETE Statement Not Working - No Error At All

这是我的代码,但它不起作用,我试图让它删除列 staffID 等于变量 currentStaffID 的记录,尽管它不会删除记录或给出错误,它只是在 DELETE 语句之后继续并显示 MsgBox。

Dim AreYouSureEdit = MsgBox("Are you sure you want to delete this record?", MsgBoxStyle.YesNo)

    If DbConnect() And AreYouSureEdit = MsgBoxResult.Yes Then

        Dim SQLCmd As New OleDbCommand
        SQLCmd.Connection = cn
        currentStaffID = editStaffIDTxtBox.Text()

        SQLCmd.CommandText = "DELETE * STAFF WHERE staffID = @currentStaffID"
        cn.Close()

        MsgBox("Record Deleted.", MsgBoxStyle.OkOnly)

    End If

您正在设置命令和所有内容 - 但您永远不会执行它!当然什么也没有发生.....

您需要添加一行代码:

Dim SQLCmd As New OleDbCommand
SQLCmd.Connection = cn
currentStaffID = editStaffIDTxtBox.Text()

SQLCmd.CommandText = "DELETE * STAFF WHERE staffID = ?"

'' You need to define the parameter and set its value here!
SQLCmd.Parameters.Add("p1", OleDbType.Int).Value = currentStaffID;

'' you need to actually **EXECUTE** your DELETE query!
SQLCmd.ExecuteNonQuery()

cn.Close()

此外,虽然您在 SQL 查询文本中设置了一个参数,但我没有看到您在 SQLCmd 对象上实际定义此类参数的位置 -还要注意:OleDB 不使用 named 参数(就像本机 SQL 服务器客户端那样)——它使用 positional 参数(这就是我用 ? 替换您的命名参数的原因)。由于只有一个参数,这应该不是问题 - 但您需要正确定义 SQLCmd 的参数(并设置其值)

连接和命令可以使用非托管资源,因此需要调用它们的 .Dipose 方法来释放这些资源。 Using...End Using 块负责处理此问题以及 .Close 连接。您的数据库对象必须是使用它们的方法的本地对象。

始终使用参数以避免Sql注入。

Private Sub OpCode()
    Dim AreYouSureEdit = MsgBox("Are you sure you want to delete this record?", MsgBoxStyle.YesNo)
    If AreYouSureEdit = MsgBoxResult.Yes Then
        Using cn As New OleDbConnection("Your connection string"),
                SQLCmd As New OleDbCommand("DELETE From STAFF WHERE staffID = @currentStaffID", cn)
            SQLCmd.Parameters.Add("@currentStaffID", OleDbType.Integer).Value = CInt(editStaffIDTxtBox.Text)
            cn.Open()
            SQLCmd.ExecuteNonQuery()
        End Using
        MsgBox("Record Deleted.", MsgBoxStyle.OkOnly)
    End If
End Sub