如何解决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 举报,一经查实,本站将立刻删除。