db.RunProc("ERP_Ex_Warehouse", ds);cmbgetgoods.DataSource = ds.Tables[2];cbxOutStoreTypeId.DataSource = ds.Tables[3];DataRelation drelation = new DataRelation("FK_Order_Detail", ds.Tables[0].Columns["OutStoreBillId"], ds.Tables[1].Columns["OutStoreBillId"], false);ds.Relations.Add(drelation);bs_order.DataSource = ds;bs_order.DataMember = ds.Tables[0].TableName;bs_detail.DataSource = bs_order;bs_detail.DataMember = "FK_Order_Detail";
像上面这样的两表如何更新比较好,首选更新时都是用da.update()的方法我先说下我的想法,
我想先更新主表,然后更新从表,
在从表中建个触发器INSERT时取出主表Select SCOPE_IDENTITY()的编号更新到从表中去
大家说说,你们常用的做法,再讨论一下我的做法的不足之处
BEGIN TRANSACTIONINSERT INTO 主表
IF @@ERROR<>0
BEGIN
RAISERROR('XX出错',16,1)
ROLLBACK TRANSACTION
RETURN
END INSERT INTO 从表
IF @@ERROR<>0
BEGIN
RAISERROR('XXXX出错',16,1)
ROLLBACK TRANSACTION
RETURN
END COMMIT TRANSACTION
[ID] [int] NOT NULL ,
[Name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_MainTable] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [SubTable] (
[FID] [int] NULL ,
[FName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [FK_SubTable_MainTable] FOREIGN KEY
(
[FID]
) REFERENCES [MainTable] (
[ID]
) ON DELETE CASCADE ON UPDATE CASCADE
) ON [PRIMARY]
GO
ds.Tables[1].Constraints.Add(fk);
ds.EnforceConstraints = true;
能实现添加时同步ID吗
下面抄一段MSDN:
ForeignKeyConstraint 的 DeleteRule 和 UpdateRule 属性定义在用户试图删除或更新相关表中某行时采取的操作。 下表描述可用于 ForeignKeyConstraint 的 DeleteRule 和 UpdateRule 属性的不同设置。规则设置
说明
Cascade
删除或更新相关的行。
SetNull
将相关行中的值设置为 DBNull。
SetDefault
将相关行中的值设置为默认值。