У меня есть этот код, чтобы удалить фотографа из моей таблицы, однако, 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)
);
Как я уже упоминал в комментарии, вы можете использовать Cascading Delete. Вы можете изменить таблицу, как показано ниже.
ALTER TABLE billeder
ADD CONSTRAINT fk_photographer
FOREIGN KEY (photographer_id)
REFERENCES photographers (photographer_id)
ON DELETE CASCADE;
Установите каскадное удаление по вашему ограничению внешнего ключа. Это автоматически удалит изображение s when you delete a
фотографа ".
Нет необходимости изобретать велосипед, делая это самостоятельно.
Тот же подход -
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