Код работает идеально, если пользователь не совершает ошибку, однако, если ошибка допущена, программа не аварийно завершает работу, но она не будет делать ничего другого, запрограммированного для нее.Когда я нажимаю кнопку «Добавить» еще раз, моя программа сохраняет изменения в базе данных и переходит в мой оператор catch без сохранения.Как очистить ошибку после ее перехвата, чтобы я мог добавить другого пользователя в базу данных?
Чтобы сделать ее более понятной:
Скажем, вы вводите Test, Test в textbox
, как толькокак программа открыта.Вы получите это исключение
InnerException = {"Нарушение ограничения PRIMARY KEY 'PK_Users'. Невозможно вставить повторяющийся ключ в объект 'dbo.Users'. Значение дублирующегося ключа равно (Test, Test).Заявление было прекращено."}.
Если вы затем попытаетесь ввести Check, Check, вы получите исключение
InnerException = {"Нарушение ограничения PRIMARY KEY 'PK_Users'. Невозможно вставить повторяющийся ключ вобъект 'dbo.Users'. Дубликат ключевого значения (Test, Test). Оператор завершен. "}.
Если имя изменилось, почему я получаю ту же ошибку.При отладке, если вы проверяете имя, используемое в: db.Users.Add(user)
, оно показывает Check, Check, поэтому оно не похоже на то, что оно не меняет user.Name
try
{
if (addNameTextBox.Text.Trim().Length == 0 || addTitleTextBox.Text.Trim().Length == 0)
return;
var user = new User();
user.Name = addNameTextBox.Text.Trim();
user.Title = addTitleTextBox.Text.Trim();
db.Users.Add(user);
db.SaveChanges();
addNameTextBox.Text = "";
addTitleTextBox.Text = "";
AutoCompleteNameTextBox();
}
catch (System.Data.Entity.Infrastructure.DbUpdateException)
{
databaseErrorLabel.Visible = true;
databaseErrorLabel.Text = "User with this name is already in database";
}