C# 无法通过C中的存储过程在可空列中插入空值#

C# 无法通过C中的存储过程在可空列中插入空值#,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我有一个SQL表,其中列设置为null。现在我通过存储过程从代码中传递空值,它抛出一个错误,过程或函数'MyStoredProcedure'需要参数'@parameter',但没有提供。 现在让我感到困惑的是,若我添加null条件并传递DBNull.Value,那个么它可以正常工作,但若我传递的直接参数可能是null,那个么它就会抛出错误。我想知道为什么?我是不是遗漏了什么 注意:仅供参考,根据需求,传递的参数可以为null 代码: 存储过程: ALTER PROCEDURE [dbo].[In

我有一个SQL表,其中列设置为
null
。现在我通过存储过程从代码中传递空值,它抛出一个错误,
过程或函数'MyStoredProcedure'需要参数'@parameter',但没有提供。

现在让我感到困惑的是,若我添加null条件并传递
DBNull.Value
,那个么它可以正常工作,但若我传递的直接参数可能是
null
,那个么它就会抛出错误。我想知道为什么?我是不是遗漏了什么

注意:仅供参考,根据需求,传递的参数可以为null

代码:

存储过程:

ALTER PROCEDURE [dbo].[InsertScheduledBulkUpdateRecords]
    @scheduledEndDateTime DATETIME,
AS
BEGIN
    SET NOCOUNT ON;
        INSERT INTO ScheduledBulkUpdate (ScheduledEndDateTime)
        VALUES (@scheduledEndDateTime)
END
表结构屏幕截图:


你几乎已经回答了你自己的问题
null
,这是不同的东西。其中,
DBNull.Value
对数据库提供程序的意义大于
null
对数据库提供程序的意义

从DBNull开始:

在面向对象编程中不要混淆空的概念 具有DBNull对象的语言。在面向对象编程中 语言,null表示没有对对象的引用。否为空 表示未初始化的变量或不存在的数据库列


DBNull
和c#
null
是不同的东西,您可以将默认值指定为SP,尽管:
@scheduledededatetime DATETIME=null
@EhsanSajjad,所以我只能通过这个
如果…否则
路径。这是因为
AddWithValue()
占用了一些时间。您可以使用
(对象)scheduledEndDateTime??DBNull.Value
以合并空值。看见注意:需要使用对象强制转换使两侧具有可比性。
ALTER PROCEDURE [dbo].[InsertScheduledBulkUpdateRecords]
    @scheduledEndDateTime DATETIME,
AS
BEGIN
    SET NOCOUNT ON;
        INSERT INTO ScheduledBulkUpdate (ScheduledEndDateTime)
        VALUES (@scheduledEndDateTime)
END