Как удалить запись вместе со всеми связанными записями в ASP.NET (C #)

1

У меня есть этот код, чтобы удалить фотографа из моей таблицы, однако, photographer_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();
}

это моя таблица IMAGES:

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]),

);

и это моя таблица PHOTOGRAPHERS:

CREATE TABLE [dbo].[photographers] (
    [photographer_id] INT IDENTITY (1, 1) NOT NULL,
    [photographer_name] NVARCHAR (50) NOT NULL,
    PRIMARY KEY CLUSTERED ([photographer_id] ASC)
);
  • 2
    Вы можете добавить каскадное удаление или сначала проверить таблицу фотографий, а затем удалить фотографии.
  • 0
    Обратите внимание, что вы можете (и должны) улучшить свой код, используя «использование» .
Теги:

4 ответа

1
Лучший ответ

Как я уже упоминал в комментарии, вы можете использовать Cascading Delete. Вы можете изменить таблицу, как показано ниже.

ALTER TABLE billeder
ADD CONSTRAINT fk_photographer
FOREIGN KEY (photographer_id)
REFERENCES photographers (photographer_id)
ON DELETE CASCADE;
  • 0
    спасибо, но где я должен это добавить? в таблице различий? а где в таблице различия? (я добавил 2 таблицы в моем вопросе).
  • 0
    Боже мой извините, я просто почему-то прочитал это, и мой мозг закипел, но я использовал ваш метод, и теперь он работает :) спасибо!
Показать ещё 1 комментарий
3

Установите каскадное удаление по вашему ограничению внешнего ключа. Это автоматически удалит изображение s when you delete a фотографа ".

Нет необходимости изобретать велосипед, делая это самостоятельно.

  • 0
    привет, может быть, я должен был указать это, но я новичок, и я не совсем уверен, как установить "каскадное удаление"
  • 0
    @tekar: Смотрите это: stackoverflow.com/questions/4454861/…
Показать ещё 1 комментарий
1

Тот же подход -

DELETE FROM images WHERE photographer_id = @photographer_id

Сначала рекомендуется сначала удалить изображения, а затем удалить фотографа. Если ваши таблицы имеют физические FK, то это не позволит вам удалять фотограф перед удалением всех зависимостей.

Надеюсь это поможет.

0

Лучше всего это вы можете сделать это в процедурах, но здесь есть подстановка и простой способ

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 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню