【问题标题】:how to handle exception when a field in database does not allow nulls当数据库中的字段不允许空值时如何处理异常
【发布时间】:2017-03-02 12:25:04
【问题描述】:

我在数据库中有一个字段是 nvarchar,它不能为空。 发生错误时,我无法显示特定消息。 在我的数据库中插入时,我尝试了两件事。 第一:

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,但是因为一个字段不允许空值,它给了我另一个异常,再次不是格式或 sql。你能告诉我这是什么类型的异常,或者如何我可以处理吗?

编辑:起初我有一个错误,它应该是 nvarchar sqldbtype,有 int。

【问题讨论】:

  • 您可以简单地在 c# 代码中进行检查,并可以显示任何自定义消息。无需去数据库查询。
  • 你是如何执行的,使用哪个命令我假设ExecuteNonQuery 还是ExecuteScalar
  • 你的意思是在sql部分之前只是为了检查字符串是否为空?
  • ExecuteNonQuery..这是我插入的众多列中的一列

标签: c# sql exception


【解决方案1】:

如果需要但未提供该值,则无论如何都不应尝试将其插入数据库 - 当然这会导致异常。

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。

【讨论】:

  • 这看起来不错。但是没有抛出必须声明标量的特定异常吗?我认为 sqlexception 会涵盖这一点
  • 我检查了你作为答案
【解决方案2】:
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;

【讨论】:

  • 对不起,这是一个错误,但它仍然不起作用..你能告诉我必须定义标量会引发什么异常吗?
  • @Alexander 你解析了文本框的值吗?你在哪里收到这个错误
  • 我以为 SQLException 会抛出必须声明的标量,但事实并非如此。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 2021-12-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多