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

xisimao xisimao 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

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也改变了,请问怎么能更新回数据库?父表是没问题的。在线等答案了
...全文

相关推荐

SQL语句删除和添加外键、主键的方法

本文将详细介绍SQL语句删除和添加外键、主键的方法,需要的朋友可以参考下

weixin_38746166

MySQL删除有外键约束的表数据方法介绍

在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...) 这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。 禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0; 然后再删除数据 启动外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=1; 查看当前FOREIGN_KEY_CHECKS的值,可用

weixin_38724363

Oracle批量执行sql语句之禁用所有表的外键

在转移数据库,进行数据导入的时候,遇到一件麻烦事,就是表间外键约束的存在,导致insert频频报错,批量执行sql语句又是顺序执行,没办法我只好手动输入。 然后输入到一半灵光一闪,为什么不先把外键约束全部禁用先呢? 于是我百度到以下资料: oracle 删除(所有)约束 禁用(所有)约束 启用(所有)约束 执行以下sql生成的语句即可 1删除所有外键约束 select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_ty

weixin_38629042

MySQL删除表的时候忽略外键约束的简单实现

删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库的所有表。当然很多自动化工具也可以做这样的事情。 删除表的时候有时会遇到这样的错误消息: ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 这是因为你尝试删除的表中的字段被用作了其他表的外键,因此在删除这个表(父表)之前必须先删除具有外键的表(子表)。也就是说,

weixin_38606404

禁用、启用外键约束和触发器

禁用、启用外键约束和触发器

iq5214270
评论 3
收藏 已收藏
分享
返回顶部
xisimao
C# 111,129 成员 642,540 内容