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




