C# 向SQL SERVER中的日期字段添加空值

C# 向SQL SERVER中的日期字段添加空值,c#,sql-server,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,

我有一个表,其中有一个字段是日期。它允许空值。 我试图使用存储过程向该字段添加一个值,但当我传递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;
在某些时候,该字段中没有值。我想在条件满足时填写。

do

cmd.Parameters.Add("@ReadyDate", SqlDbType.Date).Value = DBNull.Value;
本质上,面向对象语言中的
null
的含义与数据库中的
null
略有不同,这就是为什么

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

如果您想阅读一些有关DBNull的MSDN文章。

请尝试以下方法:

传递
ReadyDate
,默认值为null

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

基本上有两种方法来处理这个问题,这两种方法都已经给出了答案。他们中的任何一个都可以工作,这取决于你想如何处理它。如果这些答案中有一个对你有用,请考虑接受它,但这是有效的,因为这是为参数提供默认值的方法,而不是通过<代码> null 值的方法。风险在于使用
null
进行错误调用,仅仅是因为开发人员忘记在数据源声明中添加参数,并且没有注意到该错误。