You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VB.NET项目中Customer_tbl数据表更新及DataGridView传值咨询

嘿,你已经搞定了把DataGridView里的客户数据传到编辑窗体这一步,接下来咱们一步步把更新操作落地就行!

实现Customer_tbl数据更新的完整步骤

1. 在EditCustomerForm中编写保存更新的逻辑

首先给你的编辑窗体加个保存按钮(比如叫Btn_Save),然后在它的点击事件里写代码——核心是获取用户修改后的字段值,用参数化SQL更新数据库,同时用主键Customer_id定位要修改的行(这个主键别让用户改,把对应的文本框设为只读或者隐藏都可以)。

代码示例:

Private Sub Btn_Save_Click(sender As Object, e As EventArgs) Handles Btn_Save.Click
    ' 先获取所有输入的新值
    Dim customerId As Integer = Integer.Parse(TxtCustomer_ID.Text)
    Dim customerCode As String = TxtCustomer_Code.Text.Trim()
    Dim fullName As String = TxtCustomerFuulName.Text.Trim()
    Dim address As String = TxtCustomer_Address.Text.Trim()
    Dim phone As String = TxtCustomer_phone.Text.Trim()
    
    ' 处理Customer_pic:根据你的存储方式调整
    ' 如果存的是二进制图片数据:
    Dim customerPic As Byte() = Nothing
    If PictureBox_Customer.Image IsNot Nothing Then
        Using ms As New MemoryStream()
            PictureBox_Customer.Image.Save(ms, PictureBox_Customer.Image.RawFormat)
            customerPic = ms.ToArray()
        End Using
    End If
    ' 如果存的是图片路径,直接取文本框值就行:
    ' Dim customerPic As String = TxtCustomer_Pic_Path.Text.Trim()

    ' 替换成你的实际数据库连接字符串
    Dim connStr As String = "Data Source=你的服务器名;Initial Catalog=你的数据库名;Integrated Security=True;"
    
    ' 参数化更新SQL,绝对别直接拼接字符串!
    Dim updateSql As String = "UPDATE Customer_tbl 
                               SET Customer_code = @Customer_code,
                                   CustomerFuulName = @CustomerFuulName,
                                   Customer_Address = @Customer_Address,
                                   Customer_phone = @Customer_phone,
                                   Customer_pic = @Customer_pic
                               WHERE Customer_id = @Customer_id;"

    ' Using语句会自动释放数据库连接,避免资源泄漏
    Using conn As New SqlConnection(connStr)
        Try
            conn.Open()
            Using cmd As New SqlCommand(updateSql, conn)
                ' 给SQL参数赋值
                cmd.Parameters.AddWithValue("@Customer_id", customerId)
                cmd.Parameters.AddWithValue("@Customer_code", customerCode)
                cmd.Parameters.AddWithValue("@CustomerFuulName", fullName)
                cmd.Parameters.AddWithValue("@Customer_Address", address)
                cmd.Parameters.AddWithValue("@Customer_phone", phone)
                ' 处理空值:如果图片没修改,传DBNull.Value而不是Nothing
                cmd.Parameters.AddWithValue("@Customer_pic", If(customerPic Is Nothing, DBNull.Value, customerPic))

                ' 执行更新,返回受影响的行数
                Dim rowsUpdated As Integer = cmd.ExecuteNonQuery()
                If rowsUpdated > 0 Then
                    MessageBox.Show("客户信息更新成功!")
                    Me.DialogResult = DialogResult.OK ' 告诉主窗体用户点了保存
                    Me.Close()
                Else
                    MessageBox.Show("没找到要更新的客户记录哦!")
                End If
            End Using
        Catch ex As Exception
            MessageBox.Show($"更新出错啦:{ex.Message}")
        End Try
    End Using
End Sub

2. 主窗体中处理编辑结果,刷新DataGridView

你原来打开编辑窗体的代码可以稍微改一下,用ShowDialog()打开,这样能判断用户是否完成了保存,然后刷新DataGridView的数据,让界面和数据库同步:

Private Sub Btn_Edit_Click(sender As Object, e As EventArgs) Handles Btn_Edit.Click
    ' 先判断用户有没有选中行
    If DGV_Customer_tbl.CurrentRow Is Nothing Then
        MessageBox.Show("请先选一个要编辑的客户呀!")
        Return
    End If

    Dim editForm As New EditCustomerForm()
    ' 把选中行的数据传到编辑窗体(你的原有代码,补全剩下的字段)
    With DGV_Customer_tbl.CurrentRow
        editForm.TxtCustomer_ID.Text = .Cells("Customer_ID").Value.ToString()
        editForm.TxtCustomer_Code.Text = .Cells("Customer_Code").Value.ToString()
        editForm.TxtCustomerFuulName.Text = .Cells("CustomerFuulName").Value.ToString()
        editForm.TxtCustomer_Address.Text = .Cells("Customer_Address").Value.ToString()
        editForm.TxtCustomer_phone.Text = .Cells("Customer_phone").Value.ToString()
        
        ' 处理图片显示:如果数据库里有图片数据,转成图片显示在编辑窗体的PictureBox里
        If Not IsDBNull(.Cells("Customer_pic").Value) Then
            Dim picBytes As Byte() = DirectCast(.Cells("Customer_pic").Value, Byte())
            Using ms As New MemoryStream(picBytes)
                editForm.PictureBox_Customer.Image = Image.FromStream(ms)
            End Using
        End If
    End With

    ' 打开编辑窗体,等待用户操作
    If editForm.ShowDialog() = DialogResult.OK Then
        ' 用户保存成功,刷新DataGridView
        LoadCustomerData() ' 这个是你原来加载Customer_tbl数据到DataGridView的方法,直接调用就行
    End If
End Sub

3. 几个关键注意点

  • 必须用参数化查询:直接拼接SQL字符串会有SQL注入风险,还容易因为单引号、特殊字符导致语法错误,参数化查询能完美解决这些问题。
  • Customer_pic的适配:如果你的字段存的是图片路径,就把代码里的二进制处理部分换成字符串取值;如果是二进制数据,就保留图片转字节数组的逻辑。
  • 异常处理不能少:数据库操作可能会遇到连接失败、字段为空等问题,Try-Catch块能捕获这些错误,给用户清晰的提示,避免程序崩溃。
  • 主键定位:更新时一定要用Customer_id作为WHERE条件,确保只修改选中的那一行,别不小心把整个表的数据都改了!

内容的提问来源于stack exchange,提问作者subhi mohammed aljzazy

火山引擎 最新活动