C# SQL Row 删除带有子行的父级

Posted

技术标签:

【中文标题】C# SQL Row 删除带有子行的父级【英文标题】:C# SQL Row delete parent with child rows 【发布时间】:2013-10-26 13:14:01 【问题描述】:

我有一个程序,我将数据写入 datagridviews,当我关闭表单时,数据会保存到 SQL Server 数据库。但是当它有子行时,我在删除父行时遇到问题。我收到并发冲突异常。当我检查数据库时,我看到只删除了子行。

这是我创建 SQL Server 表的查询:

sql = "CREATE TABLE Auto("
                        + "VIN varchar(10) NOT NULL PRIMARY KEY,"
                        + "Make nvarchar(50),"
                        + "Model nvarchar(50),"
                        + "Year smallint);";

sql = "CREATE TABLE Repair("
                        + "ID int NOT NULL PRIMARY KEY,"
                        + "VIN varchar(10) NOT NULL,"
                        + "Description nvarchar(255),"
                        + "Cost float)"
                        + "ALTER TABLE Repair ADD FOREIGN KEY (VIN) REFERENCES Auto(VIN) ON DELETE CASCADE;";

我正在通过SqlDataAdapter 更新数据库。

【问题讨论】:

【参考方案1】:

它对我有用,这是小提琴

SQL fiddle

你有什么机会触发吗?

【讨论】:

【参考方案2】:

我不明白你为什么使用 ALTER TABLE 试试这样的方法,它对我来说很好:

CREATE TABLE Auto(
VIN varchar(10) NOT NULL PRIMARY KEY,
Make nvarchar(50),
Model nvarchar(50),
Year smallint
);

CREATE TABLE Repair(
ID int NOT NULL PRIMARY KEY,
VIN varchar(10) NOT NULL,
Description nvarchar(255),
Cost float,
FOREIGN KEY (VIN) REFERENCES Auto(VIN) ON DELETE CASCADE)
);

删除示例:

DELETE FROM Auto WHERE VIN = 'BMW';

【讨论】:

以上是关于C# SQL Row 删除带有子行的父级的主要内容,如果未能解决你的问题,请参考以下文章

带有子行的 T-SQL SELECT 存在优化

SQL从每个父行的子行返回最大值

根据之前删除的子行删除父行

Hibernate:删除未由子级引用的父级

C# Silverlight 移动控件

为啥当我在 grails 上删除一对多关系上的父级时,会在子级上调用 beforeInsert 事件?