为SqlParameter DateTime分配空值

时间:2014-08-02 07:20:04

标签: sql sql-server tsql ado.net

我有一张这样的表

CREATE TABLE [dbo].[tblVolunteers]
(
    [VolID] [int] IDENTITY(1,1) NOT NULL,
    [VolFName] [varchar](20) NULL,

    [DLExpiration] [smalldatetime] NULL,

    CONSTRAINT [PK_tblVolunteers] PRIMARY KEY CLUSTERED 
    ([VolID] ASC),
    CONSTRAINT [uniqueUserID] UNIQUE NONCLUSTERED ([UserID] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

我有一个存储过程来更新此表中的数据

ALTER PROCEDURE [dbo].[volUpdate]
    @StaffID INT,
    @ModifiedBy VARCHAR(100),
    @NickName VARCHAR(20),
    @FirstName VARCHAR(20), 
    @DLExpiration SMALLDATETIME
AS
    UPDATE tblVolunteers 
    SET
        VolNickName = @NickName, 
        VolFName = @FirstName, 
        DLExpiration = @DLExpiration
    WHERE 
        VolID = @StaffID

在某些情况下,当时我没有要更新的有效DLExpiration我希望将null值传递给表。而且我这样做

new SqlParameter("@DLExpiration", null)

但它仍然会抛出错误

  

程序或功能' volUpdate'期望参数' @ DLExpiration',这是未提供的。

有谁可以指出我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要将DBNull.Value传递给存储过程:

new SqlParameter("@DLExpiration", DBNull.Value)