如何在ASP.NET(C#)中删除记录以及所有相关记录

如何在ASP.NET(C#)中删除记录以及所有相关记录,c#,sql,asp.net,C#,Sql,Asp.net,我有此代码从我的表中删除摄影师,但是,摄影师id是我表“图像”中的外键,当我删除摄影师时,我想删除我正在删除的摄影师在“图像”表中的所有图像。我该怎么做 ... else if (e.CommandName == "Slet") { SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings["DatabaseCo

我有此代码从我的表中删除摄影师,但是,摄影师id是我表“图像”中的外键,当我删除摄影师时,我想删除我正在删除的摄影师在“图像”表中的所有图像。我该怎么做

...

else if (e.CommandName == "Slet")
{
    SqlConnection conn = new SqlConnection();
    conn.ConnectionString =
        ConfigurationManager.ConnectionStrings["DatabaseConnectionString1"].ToString();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;

    cmd.CommandText = "DELETE FROM photographers WHERE photographer_id = @photographer_id";

    cmd.Parameters.Add("@photographer_id", SqlDbType.Int).Value = e.CommandArgument.ToString();

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

    Repeater1.DataBind();
}
这是我的图像表:

CREATE TABLE [dbo].[images] (
    [image_id] INT  IDENTITY (1, 1) NOT NULL,
    [image] NVARCHAR (50) NOT NULL,
    [FK_photographer] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([billede_id] ASC),
    CONSTRAINT [FK_fotograf] FOREIGN KEY ([FK_fotograf]) REFERENCES [dbo].[Fotografer] ([fotograf_id]),

);
这是我的摄影师表:

CREATE TABLE [dbo].[photographers] (
    [photographer_id] INT IDENTITY (1, 1) NOT NULL,
    [photographer_name] NVARCHAR (50) NOT NULL,
    PRIMARY KEY CLUSTERED ([photographer_id] ASC)
);
设置外键约束。这将在您删除摄影师时自动删除图像

不需要自己重新发明轮子。

设置外键约束。这将在您删除摄影师时自动删除图像

没有必要通过自己来重新发明轮子。

同样的方法-

DELETE FROM images WHERE photographer_id = @photographer_id
建议先删除图像,然后删除摄影师。如果您的表具有物理FK,则在删除所有从属项之前,它将不允许您删除摄影师

希望这有帮助。

同样的方法-

DELETE FROM images WHERE photographer_id = @photographer_id
建议先删除图像,然后删除摄影师。如果您的表具有物理FK,则在删除所有从属项之前,它将不允许您删除摄影师


希望这能有所帮助。

更好的方法是你可以在程序中完成 但这里有一个简单的替代方法

SqlCommand cmd = new SqlCommand();
                        cmd.Connection = conn;
    conn.Open();
    cmd.CommandText = "DELETE FROM photographers WHERE photographer_id = @photographer_id";


cmd.Parameters.Add("@photographer_id", SqlDbType.Int).Value = e.CommandArgument.ToString();


cmd.ExecuteNonQuery();
    //deleted from photographers 

cmd.CommandText = "DELETE FROM Images WHERE photographer_id = @photographer_id";


cmd.Parameters.Add("@photographer_id", SqlDbType.Int).Value = e.CommandArgument.ToString();
     cmd.ExecuteNonQuery();
    //deleted from images 

更好的方法是你们可以在程序中完成 但这里有一个简单的替代方法

SqlCommand cmd = new SqlCommand();
                        cmd.Connection = conn;
    conn.Open();
    cmd.CommandText = "DELETE FROM photographers WHERE photographer_id = @photographer_id";


cmd.Parameters.Add("@photographer_id", SqlDbType.Int).Value = e.CommandArgument.ToString();


cmd.ExecuteNonQuery();
    //deleted from photographers 

cmd.CommandText = "DELETE FROM Images WHERE photographer_id = @photographer_id";


cmd.Parameters.Add("@photographer_id", SqlDbType.Int).Value = e.CommandArgument.ToString();
     cmd.ExecuteNonQuery();
    //deleted from images 

正如我在评论中提到的,您可以使用级联删除。您可以修改您的表格,如下所示

ALTER TABLE开坯机
添加约束fk_
外键(摄影师id)
参考摄影师(摄影师id)
删除级联;

正如我在评论中提到的,您可以使用级联删除。您可以修改您的表格,如下所示

ALTER TABLE开坯机
添加约束fk_
外键(摄影师id)
参考摄影师(摄影师id)
删除级联;

您可以添加级联删除或先检查照片表,然后再删除照片。请注意,您可以(并且应该)通过添加级联删除或先检查照片表,然后删除照片来改进代码。请注意,您可以(并且应该)先添加级联删除或先检查照片表,然后删除照片通过改进您的代码。您好,也许我应该指定此选项,但我是一名初学者,我不太确定如何设置“级联删除”@tekar:请参见:@tekar首先使用此查询删除FK约束:
ALTER TABLE dbo.bilder DROP constraint FK_fotograf
。现在使用此查询添加带有层叠删除的FK约束:
ALTER TABLE dbo.billeder添加约束FK\u fotograf\u Cascade外键(FK\u摄影师)引用dbo.delete Cascade上的摄影师(摄影师id)
。您好,也许我应该指定此项,但我是初学者,我不太确定如何设置“级联删除”@tekar:请参见:@tekar首先使用此查询删除FK约束:
ALTER TABLE dbo.billeder DROP constraint FK_fotograf
。现在使用此查询添加带有级联删除的FK约束:
ALTER TABLE dbo.billeder添加约束FK_fotograf_级联外键(FK)在DELETE CASCADE
中引用了dbo.摄影师(摄影师id)。谢谢,但是我应该在哪里添加这个?在表定义中?在表定义中?在哪里?(我在问题中添加了两个表)我很抱歉,因为某种原因,我不能那样读它,我的大脑被烧焦了,但我使用了你的方法,现在似乎起作用了:)谢谢!没问题,很高兴它有帮助。谢谢,但我应该在哪里添加这个?在表定义中?在表定义中?在表定义中?(我在问题中添加了两个表)我的天啊,我很抱歉,因为某种原因,我不能那样读它,我的大脑被烧焦了,但我用了你的方法,现在它似乎起作用了:)谢谢你!没问题,很高兴它有帮助。