C# 无法通过C中的存储过程在可空列中插入空值#
我有一个SQL表,其中列设置为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
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