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