在SQL SERVER中将空值添加到DATE字段

时间:2015-08-07 14:18:24

标签: c# sql-server

我有一个表格,其中包含一个日期字段。它允许空值。 我试图使用存储过程向该字段添加值,但是当我传递null时,我得到一个

  

"存储过程需要@ReadyDate的值。"

这是存储过程:

Create PROCEDURE [dbo].[sp_UpdateStatus]
@id int,
@status varchar(20),
@ReadyDate Date
AS
BEGIN
    UPDATE PMF_ToolingRequests
        SET status = @status,
        ReadyDate = @ReadyDate
    WHERE ID = @id
END

这是我用来更新字段的C#代码。当我发送一个空字符串时它也会发出声音:

if (setReadyTime)
{
    cmd.Parameters.Add("@ReadyDate", SqlDbType.Date).Value = DateTime.Today.ToString("yyyy/MM/dd");
}
else
{
    cmd.Parameters.Add("@ReadyDate", SqlDbType.Date).Value = (DateTime?)null;
}

cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
cmd.Parameters.Add("@status", SqlDbType.VarChar).Value = status;

我也尝试过:

cmd.Parameters.Add("@ReadyDate", SqlDbType.Date).Value = null;

在某些时候该领域没有任何价值。我希望在满足条件时填写它。

2 个答案:

答案 0 :(得分:6)

DO

cmd.Parameters.Add("@ReadyDate", SqlDbType.Date).Value = DBNull.Value;

实质上,面向对象语言中的null与数据库中NULL的含义略有不同,这就是为什么

cmd.Parameters.Add("@ReadyDate", SqlDbType.Date).Value = null;

不起作用。

Here是一篇关于DBNull的MSDN文章,如果你想做一些阅读。

答案 1 :(得分:2)

试试这个:

ReadyDate传递给默认值为空

Create PROCEDURE [dbo].[sp_UpdateStatus]
@id int,
@status varchar(20),
@ReadyDate Date=null
AS
BEGIN
    UPDATE PMF_ToolingRequests
        SET status = @status,
        ReadyDate = @ReadyDate
    WHERE ID = @id
END