如果用户在SQL中没有提供任何值,如何设置空值?

时间:2014-06-04 15:22:54

标签: c# sql ado.net

大家好我有一个以下代码,用于使用C#Sql和ADO.NET将数据输入数据库。如果用户不希望在ITEM_MODEL和{{1}中输入值,我想要两列比它应该在数据库中保存为null。我已经为该列提供了QUANTITY。当我为这些列提供空值时,它说IS NULL。我希望这些列在用户自动获取空值deosnt提供任何值:

MUST DECLARE VALUES @ITEM_MODEL

3 个答案:

答案 0 :(得分:1)

您可以使用DBNull.Value。如果没有要插入的值,则可以使用此值,然后相应的记录列值将为null。

例如,使用您的代码:

if (!String.Equals(txtTodaystotal.Text, "0"))
{ 
    da.InsertCommand.Parameters.Add("@ITEM_MODEL", SqlDbType.VarChar).Value = txtItemModelCredir.Text;
    da.InsertCommand.Parameters.Add("@QUANTITY", SqlDbType.Int).Value = txtQuantityCredit.Text;
}
else
{
    da.InsertCommand.Parameters.Add("@ITEM_MODEL", SqlDbType.VarChar).Value = DBNull.Value;
    da.InsertCommand.Parameters.Add("@QUANTITY", SqlDbType.Int).Value = DBNull.Value;
}

答案 1 :(得分:0)

我的建议是在INSERT时使用字段名称。这有助于:

  1. 确保对表的任何更改对代码的影响最小。如果DBA使用不同顺序的列重新创建表,或添加列(可能具有列默认值),则代码不会中断或执行类似将数据插入错误列的可怕操作。
  2. 您可以完全从字段列表中排除任何没有数据的列。这允许数据库选择默认值(如果在列级别设置)。如果您决定在没有值的情况下为某个指标插入默认0值,则可以在数据库级别设置该值。
  3. 示例:

    INSERT TABLE ( FIELD1, FIELD2, FIELD3 ) VALUES ( @FIELD1, @FIELD2, @FIELD3 );
    

    如果你没有@ FIELD2的值,你可以生成:

    INSERT TABLE ( FIELD1, FIELD3 ) VALUES ( @FIELD1, @FIELD3 );
    

    即使您不打算使用此方法来修复丢失的数据问题,列出字段仍然是一个好主意。

答案 2 :(得分:0)

因为您没有使用存储过程 - 顺便说一下,这会更舒服。在存储过程中,您可以为参数定义默认值 - >那么你只需将它们设置为NULL或任何你想要的。 在您的情况下,这完全是您的责任 - 验证输入。因此,您只需检查输入是否为null或为空,并取决于该决定在传递输入或DbNull值之间进行选择。您的代码看起来像这样:

da.InsertCommand.Parameters.Add("@ITEM_MODEL", SqlDbType.VarChar).Value = string.IsNullOrEmpty(txtItemModelCredir.Text) ? DBNull.Value : txtItemModelCredir.Text;
da.InsertCommand.Parameters.Add("@QUANTITY", SqlDbType.Int).Value = string.IsNullOrEmpty(txtQuantityCredit.Text) ? DBNull.Value : txtQuantityCredit.Text;