如何处理具有自定义消息的不同文本框的格式异常

本文关键字:文本 异常 格式 自定义消息 何处理 处理 | 更新日期: 2023-09-27 18:02:35

我正在用sqlcommand和参数在数据库中插入数据。所有这些都在try{}部分中,之后我有一个catch{}来获取异常。我的问题是,我有一个日期文本框,我有一个整数文本框。

如何设置日期字段

`catch{FormatException)
{
messagebox.show("Your date field must be dd/mm/yyy");
}

和如何为我的整数字段

`catch{FormatException)
    {
    messagebox.show("That field must be integer");
    }

如何区分这两个格式异常?

如何处理具有自定义消息的不同文本框的格式异常

对于日期输入,而不是使用文本框,使用DatePicker。它将排除检查格式的需要。

<DatePicker name="datePicker"></DatePicker>

在后面的代码中获取日期选取的值,

datePicker.SelectedDate

现在只需要检查是否为整数。

int parsedValue;
if(int.TryParse(convertToInt, out parsedValue)){ 
    // All Ok
}
else {
     messageError = "That field must be integer";
     // Display error contained witin messageError 
}

不需要加上try catch

两个FormatExceptionexc.Message提供不同的值(其中exc是异常变量)。对于int,它是"输入字符串格式不正确",对于DateTime,它是"字符串未被识别为有效的日期时间"。

因此,可以只使用一个try-catch并在末尾检查这个字符串,但这可能会在后面产生问题(代码变得难以维护)。最好使用单独的try-catch块。

string messageError = null;
string convertTodate = "34/";
string convertToInt = "3.5";
try
{
    int newInt = Convert.ToInt32(convertToInt);
}
catch(FormatException)
{
    messageError = "That field must be integer";
}
try
{
    DateTime newDate = Convert.ToDateTime(convertTodate);
}
catch(FormatException)
{
    messageError = "Your date field must be dd/mm/yyy";
}
if(string.IsNullOrEmpty(messageError))
{
    // All Ok
}
else
{
    // Display error contained witin messageError 
}