我有一个应用程序来维护包含人员及其数据的数据库。比如电话号码、出生日期、地址等。我想修复其中一个错误...我只需要添加现有的出生日期(该日期不能是将来时,并且必须符合所需的格式(格式01.01.0101 删除了应用程序 P.S 这是一个例子)。我知道如何进行这些限制/检查并验证数据,但我有一个大问题 - 当我抛出异常时,我的应用程序会删除... try-catch 构造没有帮助
此代码检查出生日期,以便它不会是将来的日期:
private DateTime _dateOfBirth;
public DateTime DateOfBirth
{
get { return _dateOfBirth; }
set
{
try
{
if (DateOfBirth > DateTime.Now)
{
throw new Exception("Дата рождения не может быть в будущем.");
}
}
catch (Exception ex)
{
MessageBox.Show("Произошла ошибка при записи в базу данных: " + ex.Message);
}
}
}
这是带有 EF 的 WPF 应用程序。我开始学习它,但不知道如何处理这些异常..
我尝试使用 try-catch 构造,但没有帮助 还尝试使用全局错误处理程序,但它也不起作用。
public App()
{
this.DispatcherUnhandledException += OnDispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += OnCurrentDomainUnhandledException;
TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;
}
void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show("Необработанное исключение: " + e.Exception.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
e.Handled = true;
}
void OnCurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show("Необработанное исключение: " + ((Exception)e.ExceptionObject).Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
}
void OnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
MessageBox.Show("Необработанное исключение: " + e.Exception.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
e.SetObserved();
}
我认为这主要是不好的形式,但您可以在设置器中处理验证并显示错误消息,而不会引发可能导致应用程序崩溃的异常。
private DateTime _dateOfBirth;
public DateTime DateOfBirth
{
get { return _dateOfBirth; }
set
{
DateTime tempDate = value;
if (tempDate > DateTime.Now)
{
MessageBox.Show("Дата рождения не может быть в будущем.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
_dateOfBirth = tempDate; // Only assign the value if it's valid.
}
}
}