一个关于SQL外键约束的问题

xisimao 2009-05-13 07:07:48

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cat"].ConnectionString);
con.Open();

DataSet dataset = new DataSet();

SqlDataAdapter ac = new SqlDataAdapter("select * from child",con);
SqlCommandBuilder bc = new SqlCommandBuilder(ac);
ac.Fill(dataset, "child"); //子表绑定到DataSet中

SqlDataAdapter ap = new SqlDataAdapter("select * from Parent", con);
SqlCommandBuilder bp = new SqlCommandBuilder(ap);
ap.Fill(dataset, "Parent");//父表绑定到DataSet中

DataColumn parent = dataset.Tables["Parent"].Columns["ID"];
DataColumn child = dataset.Tables["child"].Columns["ID"];
ForeignKeyConstraint fk = new ForeignKeyConstraint("f", parent, child);
fk.UpdateRule = Rule.Cascade;
dataset.Tables["child"].Constraints.Add(fk);//建立约束关系

dataset.Tables["Parent"].Rows[0]["ID"] = 3;//改变父表中ID

ap.Update(dataset, "Parent");//更新父表
ac.Update(dataset, "child");//更新子表

foreach (DataRow d in dataset.Tables["child"].Rows)
{
Console.WriteLine("{0}|{1}", d["ID"].ToString(), d["name"].ToString());
}//显示DataSet中子表的值
con.Close();

更新子表时出错了,对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。
如果不更新子表那么下面的显示可以发现DataSet中的子表的ID也改变了,请问怎么能更新回数据库?父表是没问题的。在线等答案了
...全文
85 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
絮絮 2009-05-13
  • 打赏
  • 举报
回复
服了
xisimao 2009-05-13
  • 打赏
  • 举报
回复
哦。。。我TMD忘了加主键了,我擦,,,对不起大家了,我自己结了
xisimao 2009-05-13
  • 打赏
  • 举报
回复
哦我补充一下,
Parent 表有两列 ID int 主键 name varchar(50)
chlid 表有两列 ID int name varchar(50) 主键

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧