Как проверить наличие дубликатов и удалить их при каждой записи данных в SQL Server, WPF, C #? - PullRequest
0 голосов
/ 20 апреля 2019

Я практикую интеграцию SQL в C #, создав приложение Zoo Management. Пользователи могут ввести новое имя Zoo, которое будет внесено в список ListBox. Я хочу, чтобы приложение проверило, есть ли новый зоопарк в списке или нет (проверяет наличие дубликатов), и, если есть дубликат, оно удалит вновь добавленный зоопарк.

Я не могу понять SQL-запрос для этого.

Здесь я создаю крошечное приложение для моделирования, чтобы узнать о методе удаления дубликатов.

Имя таблицы TEST с двумя столбцами Id и Name.

В WPF есть ListBox, в котором перечислены все имена, 2 кнопки (Add и Remove имена) и один TextBox для ввода имени для добавления.

Я пробовал различные методы, и я просто не могу заставить его работать.

public partial class MainWindow : Window
{
    SqlConnection sqlConnection;

    public MainWindow()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["DeleteDuplicateTest.Properties.Settings.DB1ConnectionString"].ConnectionString;
        sqlConnection = new SqlConnection(connectionString);
        InitializeComponent();
        ShowNames();
    }

    // This is where I got lost
    public void CheckForDuplicates()
    {
    }

    public void ShowNames()
    {
        string query ="select * from TEST";
        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(query, sqlConnection);

        using (sqlDataAdapter)
        {
            DataTable names = new DataTable();
            sqlDataAdapter.Fill(names);
            listNames.DisplayMemberPath = "Name";
            listNames.SelectedValuePath = "Id";
            listNames.ItemsSource = names.DefaultView;
        }
    }

    private void Add_Click(object sender, RoutedEventArgs e)
    {
        if (myTextBox.Text != "") 
        { 
            string query = "Insert into TEST values (@Name)";

            SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);

            sqlConnection.Open();
            sqlCommand.Parameters.AddWithValue("@Name", myTextBox.Text);

            sqlCommand.ExecuteScalar();

            sqlConnection.Close();

            ShowNames();
            CheckForDuplicates();
        }
    }

    private void Remove_Click(object sender, RoutedEventArgs e)
    {
        if (listNames.SelectedValue != null)
        {
            string query = "Delete from TEST where Id=@Name";

            SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);

            sqlConnection.Open();
            sqlCommand.Parameters.AddWithValue("@Name", listNames.SelectedValue);

            sqlCommand.ExecuteScalar();
            sqlConnection.Close();

            ShowNames();
            CheckForDuplicates();
        }
    }
}
...