微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

这是我的代码,它不起作用,我试图使它删除一个记录,其中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不使用命名参数(就像本机SQL Server客户端一样)-它使用 positional 参数(因此我只用{{1}替换了命名参数})。由于只有一个参数,所以这里应该没问题-但您需要正确定义?的参数(并设置其值)

,

连接和命令可以使用非托管资源,因此,它们需要调用其.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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。