Как удалить элемент из таблицы, который является результатом пересечения двух других таблиц - PullRequest
0 голосов
/ 19 марта 2020

Добрый день! Я делаю небольшую программу WPF, используя SQL. У меня есть таблица Zoo, таблица Animal и ZooAnimal, которая представляет собой комбинацию из 2 других таблиц. Таким образом, идея заключается в том, что при нажатии на зоопарк должна быть информация о животных, расположенных в конкретном зоопарке + некоторые другие функции.

Я столкнулся с проблемой при реализации кнопки «Удалить животное». Он должен удалить выбранного животного из таблицы ZooAnimal, но я не знаю, какой SQL код должен быть использован для этого.

Я пытался так:

private void removeAnimal_Click(object sender, RoutedEventArgs e)
    {
            string query = "delete AnimalZoo Set ZooId = @ZooId where AnimalId = @AnimalId";
            SqlCommand command = new SqlCommand(query, connection);

            connection.Open();
            command.Parameters.AddWithValue("@ZooId", listZoos.SelectedValue);
            command.Parameters.AddWithValue("@AnimalId", listAssociatedAnimals.SelectedValue);
            command.ExecuteScalar();

            connection.Close();
            showAssociatedAnimals();
    }

Я буду будьте очень рады получить любую помощь по этому вопросу.

Вот как выглядит интерфейс WPF:

WPF UI Main Window

База данных выглядит следующим образом:

SQL Database

Определение таблицы ZooAnimal:

CREATE TABLE [dbo].[ZooAnimal] (
[Id]       INT IDENTITY (1, 1) NOT NULL,
[ZooId]    INT NOT NULL,
[AnimalId] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [AnimalFK] FOREIGN KEY ([AnimalId]) REFERENCES [dbo].[Animal] ([Id]) ON DELETE CASCADE,
CONSTRAINT [ZooFK] FOREIGN KEY ([ZooId]) REFERENCES [dbo].[Zoo] ([Id]) ON DELETE CASCADE

);

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Кроме того, в своем коде c# вы вызываете ExecuteScalar для выполнения оператора Delete. Это SQL используется, не предоставляет полей для возврата (это не запрос), поэтому вам лучше использовать ExecuteNonQuery.

command.ExecuteNonQuery();

Наслаждайтесь!

0 голосов
/ 19 марта 2020
delete AnimalZoo where AnimalId = @AnimalId and ZooId = @ZooId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...