You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET操作MS Access数据库删除功能仅移除ListView条目未删表记录问题

问题原因及修复方案
  • product_id字段类型不匹配:若PRODUCT表中product_id为数字类型(整数、长整型等),现有SQL语句给参数加了单引号会被Access识别为字符串,无法匹配到对应数据行,删除操作实际影响行数为0,不会修改数据库内容。
  • 执行结果未校验:现有代码不校验ExecuteNonQuery()的返回值直接提示删除成功,实际未匹配到符合条件的行时删除操作并没有生效,你看到的ListView数据消失大概率是Refresh()方法直接移除了前端控件项,没有同步校验数据库操作结果。
  • Access文件副本覆盖问题:如果你的Access数据库文件放在项目根目录,且文件属性设置为「如果较新则复制」,程序运行时会将原始文件复制到bin/Debug目录下执行操作,你直接查看项目根目录的原始数据库自然看不到删除结果,或是程序重启后被原始文件覆盖,看起来像删除未生效。
  • 拼接SQL存在语法风险:直接拼接ListView内容到SQL语句,一旦子项内容存在单引号等特殊字符会直接导致SQL语法错误,被异常捕获后不会执行删除操作。
修复后的代码
Public Sub DeleteProduct()
    If ListView1.SelectedIndices.Count <= 0 Then
        Return
    End If
    Dim ItemNo As Integer = ListView1.SelectedIndices(0)
    ' 提前获取要删除的product_id,避免后续索引变更取值错误
    Dim targetProductId As String = ListView1.Items(ItemNo).SubItems(0).Text
    Try
        Dim confirmResult As Integer = MsgBox("Are you sure you want to delete this record? You can't Undo", MsgBoxStyle.YesNo, "Are you sure?")
        If confirmResult <> MsgBoxResult.Yes Then
            Return
        End If
        conn.Open()
        ' 使用参数化查询,避免类型匹配问题和SQL注入风险
        Dim cmd2 As New OleDb.OleDbCommand("DELETE FROM PRODUCT WHERE product_id = ?", conn)
        ' 注意:如果product_id是数字类型,此处替换为 Convert.ToInt32(targetProductId)
        cmd2.Parameters.AddWithValue("@pid", targetProductId)
        ' 获取删除操作影响的行数
        Dim affectRows As Integer = cmd2.ExecuteNonQuery()
        If affectRows > 0 Then
            MsgBox("Record removed successfully", MsgBoxStyle.OkOnly, "Remove Succeeded")
            ' 确认数据库删除成功后再操作前端控件
            ListView1.Items.RemoveAt(ItemNo)
        Else
            MsgBox("未匹配到对应记录,删除操作未生效", MsgBoxStyle.OkOnly, "删除失败")
        End If
    Catch ex As Exception
        MsgBox("删除出错:" & ex.Message)
    Finally
        conn.Close()
    End Try
    ' 建议Refresh()方法实现从数据库重新拉取最新数据绑定ListView的逻辑,不要直接操作前端项
    Refresh()
End Sub
额外排查步骤
  • 确认你查看的是程序运行目录下的Access数据库文件,不是项目根目录的原始文件
  • 把生成的SQL语句直接放到Access数据库中执行测试,确认是否能删除对应行,排查SQL语法问题

内容的提问来源于stack exchange,提问作者MeltedIceCream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:54:03