大家好我有一个以下代码,用于使用C#Sql和ADO.NET将数据输入数据库。如果用户不希望在ITEM_MODEL
和{{1}中输入值,我想要两列比它应该在数据库中保存为null。我已经为该列提供了QUANTITY
。当我为这些列提供空值时,它说IS NULL
。我希望这些列在用户自动获取空值deosnt提供任何值:
MUST DECLARE VALUES @ITEM_MODEL
答案 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
时使用字段名称。这有助于:
0
值,则可以在数据库级别设置该值。示例:
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;