首先谢谢大家,我来说说问题所在
1.现象:当主表和从表都没有一条记录时(数据库为空),主从表一起保存后得到从表的外键值为0,没有与主表的主键对应起来.
2.问题环境:
A)SQLserver2000数据库,VS.net2005, 主表标识字段(自增长)为主键M_ID,从表没有与主表建立物理关系,只是设立与主表关联的外键
字段D_MID.
B)C#里在form上有sqlconnection一个,dataadpter两个(一个主,一个从),dataset一个(两表建立了关系和外键约束,并设置了
cascade),datagridview两个(一个连接主bindingsourse,另个连接FKMtableDtablebindingsource).
C)保存代码:
sqlConnection1.Open();
SqlTransaction tran = sqlConnection1.BeginTransaction();
da1.InsertCommand.Transaction = tran;
da1.UpdateCommand.Transaction = tran;
da1.DeleteCommand.Transaction = tran;
da2.InsertCommand.Transaction = tran;
da2.UpdateCommand.Transaction = tran;
da2.DeleteCommand.Transaction = tran;
try
{
da1.Update(ds);
da2.Update(ds);
tran.Commit();
}
catch
{
tran.Rollback();
ds.Tables[1].Clear();
ds.Tables[0].Clear();
da1.Fill(ds);
da2.Fill(ds);
MessageBox.Show("保存失败");
}
finally
{
sqlConnection1.Close();
}
D)运行操作:先主表增加记录(只是更新了dataset),再从表增加记录(因为数据库为空,所以得到主表外键为0),按下保存,执
行C)代码。
3。结果:在数据库至少有一条记录时完全正确的保存了主从表,在数据库为空时,从表记录外键为0,保存失败。