您的位置:首页 > 其它

利用外键关系实现多表关联更新

2017-08-18 10:04 531 查看
窗体如下图:

上面DataGridView1数据为Northwind中的Orders表

下面DataGridView2数据为Northwind中的Order Details表

两表的外键为:Orders.OrdersID和Order Details.OrderID

目标:实现点击Button1按钮,关联更新两个表。



窗体代码:

Public Class Form1
Dim bs_orders As New BindingSource
Dim da_orders As New SqlClient.SqlDataAdapter

Dim bs_ordersdetails As New BindingSource
Dim da_ordersdetails As New SqlClient.SqlDataAdapter
Dim ds As New DataSet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
da_orders = New SqlClient.SqlDataAdapter("Select * from Orders", cn)
da_orders.Fill(ds, "[orders]")
bs_orders.DataSource = ds

Dim scb As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(da_orders)
'用SqlCommandBuilder为SqlDataAdapter生成用于添加、删除、更新的Command
da_orders.InsertCommand = scb.GetInsertCommand()
da_orders.UpdateCommand = scb.GetUpdateCommand()
da_orders.DeleteCommand = scb.GetDeleteCommand()

'绑定DS中的[Orders]表
bs_orders.DataMember = "[orders]"

da_ordersdetails = New SqlClient.SqlDataAdapter("select * from [Order Details]", cn)
da_ordersdetails.Fill(ds, "[Order Details]")

Dim scb2 As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(da_ordersdetails)
'用SqlCommandBuilder为SqlDataAdapter生成用于添加、删除、更新的Command
da_ordersdetails.InsertCommand = scb2.GetInsertCommand()
da_ordersdetails.UpdateCommand = scb2.GetUpdateCommand()
da_ordersdetails.DeleteCommand = scb2.GetDeleteCommand()

'创建关系,利用[Orders]中的[OrdersID]键与[Order Details]中的[OrderID]键相关联,创建外键关系
Dim relation As DataRelation = New DataRelation("FK_ORDERS_ORDER_DETAILS", ds.Tables("[Orders]").Columns("OrderID"), ds.Tables("[Order Details]").Columns("OrderID"))
ds.Relations.Add(relation)
bs_ordersdetails.DataSource = bs_orders
'根据关系进行筛选关联
bs_ordersdetails.DataMember = "FK_ORDERS_ORDER_DETAILS"

DataGridView1.DataSource = bs_orders
DataGridView2.DataSource = bs_ordersdetails
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If ds.HasChanges Then
da_ordersdetails.Update(ds, "[Order Details]")
da_orders.Update(ds, "[Orders]")
ds.AcceptChanges()
End If
End Sub
End Class


对数据修改后如图:



点击保存按钮,进入数据库查看两张表更新后数据,效果如下:



由此实现了两张关系表的关联更新!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息