当数据库中的字段不允许为null时,如何处理异常

本文关键字:何处理 处理 异常 数据库 字段 不允许 null | 更新日期: 2023-09-27 18:14:05

我在数据库中有一个字段是nvarchar,它不能为null。出现错误时,我在显示特定消息时遇到问题。在插入数据库时,我尝试了两件事。第一个:

if (string.IsNullOrWhiteSpace(textBoxCity.Text))
    MessageBox.Show("This cannot be empty");
else  
    cmd.Parameters.Add("@city", SqlDbType.NVarChar).Value = textBoxCity.Text;

第二:

try
{
    if(string.IsNullOrWhiteSpace(textBoxCity.Text))
    {
        MessageBox.Show("Cannot be empty");
    }
    else
    {
        cmd.Parameters.Add("@city", SqlDbType.NVarChar).Value = textBoxCity.Text;
    }
}
catch (Exception ex)
{
    if (ex is FormatException)
    {
        MessageBox.Show("Cannot be empty");
        return;
    }
    else if (ex is SqlException)
    {
        MessageBox.Show("Cannot be empty");
    }
    throw;
}

第二个给了我正确的消息,但它也给了我一个例外,它说标量必须解密。我该如何处理?我试着给它一个db.null,但因为字段不允许null,它给了我另一个异常,同样不是format或sql。你能告诉我这是什么样的例外吗?或者我该如何处理?

编辑:一开始我有一个错误,它应该是nvarchar sqldbtype,但有int。

当数据库中的字段不允许为null时,如何处理异常

如果值是必需的,但没有提供,那么无论如何都不应该尝试将其插入数据库中——当然这会导致异常。

bool valid = true;
if (string.IsNullOrWhiteSpace(textBoxCity.Text))
{
     valid = false;
     MessageBox.Show("This cannot be empty");
}
if(valid)
{
    cmd.Parameters.Add("@city", SqlDbType.Int).Value = textBoxCity.Text;
    //execute sql query here
}

正如另一个答案所说,您也应该将文本解析为int。

cmd.Parameters.Add("@city", SqlDbType.Int).Value = textBoxCity.Text;

您将参数定义为类型int,并将其赋予string。您需要将TextBox中的值解析为int.

int city = 0;
int.TryParse(textBoxCity.Text, out city)
cmd.Parameters.Add("@city", SqlDbType.Int).Value = city;