TheBigBearNow Ответов: 1

C# WPF загрузка пользователя остановка ограничения уникального ключа в SQL


Всем привет,
I have a C# WPF application that I log into and I pass the user to the next screen. Then I click to go to a profile screen and if the user already has profile data I autopopulate all the fields. In my profile screen I have it so when you set the combobox to ‘Yes’ it creates the customer in the database. When you click the save button it just updates all the data. When I load the controls it sets the combobox to ‘Yes’ and it tries to recreate the customer in the DB. I get a error: “Violation of UNIQUE KEY constraint. Cannot insert duplicate key into DB…” I would like to check if the user already exists in the DB and if it does so it WILL NOT create a new customer so this error will not be thrown. Or any other way to get around this. Not sure if I should check for this specific error and just console.log it or any suggestions would be appreciated.
Спасибо.
//combobox selectionchanged when ‘yes’ add new customer        					
private void CboCustomer_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string cboValue = "";
            if (CboCustomer.SelectedIndex > 0)
                cboValue = ((ComboBoxItem)CboCustomer.SelectedItem).Content.ToString();

            if(cboValue.Equals("Yes")) // || if (CboCustomer.SelectedItem.ToString().Equals("Yes"))
            {
                boolIsCustomer = true;
                User addCustomer = null;
                Customer newCustomer = null;

                //MessageBoxResult result = MessageBox.Show("Updating database to customer status.",
                //    "Customer Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
                //if (result == MessageBoxResult.Yes)
                //{
                if (currentUser.IsCustomer == true)
                {
                    try
                    {                          
                        Customer custTestID = UsersDB.ReadCustomerById(currentUser.UserID);

                        if(currentUser.UserID == custTestID.UserID)
                        {
                            return;
                        }
                        else
                        {
                            addCustomer = new User(currentUser.UserID, currentUser.Username,
                            currentUser.Password, currentUser.IsAdmin, currentUser.UserCreatedDate, boolIsCustomer);
                            UsersDB.UpdateCurrentUser(addCustomer);

                            newCustomer = new Customer(currentUser.UserID, currentUser.Username, TextboxLastName.Text,
                                                    TextboxAddress.Text, TextboxCity.Text, null, 
                                                    TextboxZip.Text, TextEmailAddress.Text);
                            UsersDB.CreateCustomer(newCustomer);
                        }
                    }
                    catch(Exception ex) { MessageBox.Show(ex.Message.ToString()); }
                }
                else
                {
                    try
                    {   //UPDATE User so 'IsCustomer' property is set to True.
                        addCustomer = new User(currentUser.UserID, currentUser.Username, currentUser.Password,
                                                currentUser.IsAdmin, currentUser.UserCreatedDate, boolIsCustomer);
                        UsersDB.UpdateCurrentUser(addCustomer);
                        //CREATE Customer from current User linking together by 'UserId'
                        newCustomer = new Customer(currentUser.UserID, currentUser.Username, TextboxLastName.Text,
                                                    TextboxAddress.Text, TextboxCity.Text, null, TextboxZip.Text,
                                                    TextEmailAddress.Text);
                        UsersDB.CreateCustomer(newCustomer);
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
                }
            }
        }


Что я уже пробовал:

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

Graeme_Grant

Понимаете ли вы ошибку, которую вы видите?

TheBigBearNow

Да, я получаю нулевую ссылку на ошибку о том, что не могу ввести дубликат уникального идентификатора в базу данных.
Я пробую пару разных идей, которые у меня есть, и если это не сработает, я мог бы попробовать логическую идею (флаг), которую вы положили на мой другой пост, потому что это может сработать с той же проблемой, что и у меня, я мог бы установить флаг в конструкторе, и я мог бы просто пропустить addCustomer, если мое поле базы данных установлено в true.

1 Ответов

Рейтинг:
2

#realJSOP

Я знаю - очень жаль, что вам приходится писать какой-то код, но так оно и есть.

Поместите блок try/catch вокруг кода, который пытается вставить нового пользователя, и в части catch покажите окно сообщения, которое показывает "имя пользователя уже существует". В то же время.