VB.NET结合SQL Server删除数据时如何判断无行记录并弹出提示
删除功能修正说明
- 判定条件错误:
dt.Rows.Count的最小值为0,原代码中dt.Rows.Count < 0的判定永远不会成立,无法触发无记录提示 - 语句类型错误:删除操作用了UPDATE更新语句,完全不符合业务需求
- 查询逻辑错误:用UPDATE语句填充DataTable,无法正确判定待删除记录是否存在
- 安全风险:直接拼接用户输入到SQL语句中,存在SQL注入漏洞,修正方案使用参数化查询规避风险
- 简化判定方案:如果要直接判断DataGridView是否还有记录,可直接判定
DataGridView控件名.Rows.Count = 0,无需额外查询数据库
修正后代码
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click ' 把DataGridView1替换为你实际使用的DataGridView控件名 If DataGridView1.Rows.Count = 0 Then MessageBox.Show("无记录可删除", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Sub End If If MessageBox.Show("确定要删除该记录吗?", "删除确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) <> DialogResult.Yes Then MessageBox.Show("已取消删除", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Sub End If Using con As New SqlConnection("Data Source=(LocalDB)\UserDb;Initial Catalog=vbLoginForm;Integrated Security=True") ' 替换为正确的DELETE删除语句,使用参数化查询 Dim cmd As New SqlCommand("DELETE FROM [dbo].[Customers] WHERE [Customer's Name] = @CusName", con) cmd.Parameters.AddWithValue("@CusName", txtName.Text) Try con.Open() Dim affectRows As Integer = cmd.ExecuteNonQuery() If affectRows = 0 Then MessageBox.Show("无记录可删除", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Else MessageBox.Show("数据删除成功", "删除成功", MessageBoxButtons.OK, MessageBoxIcon.Information) ' 清空输入框 txtAddress.Text = "" txtName.Text = "" txtOrder.Text = "" txtRental.Text = "" txtNumber.Text = "" CustomersBindingSource.MoveNext() End If Catch ex As Exception MessageBox.Show($"删除失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally con.Close() End Try End Using End Sub
内容的提问来源于stack exchange,提问作者Ogirelc
相关产品推荐
相关产品推荐

