我有一个场景,C# 中的字符串可以是null
。我需要它是NULL
在 SQL Server 上。
我使用 Dapper 将其发送到 SQLServer,查询如下:
connection.Query<MyObject>("[dbo].[sp_MyStoredProcedure]"), new
{
StartDate: startDate
}, commandType: CommandType.StoredProcedure);
Where startDate
是有时可以等于的字符串null
.
存储过程的参数是
@StartDate varchar(10) = NULL
当它是NULL
它返回所有记录。我已通过 SSMS 确认此行为有效。
I read 这个帖子 https://code.google.com/p/dapper-dot-net/issues/detail?id=56马克·格拉维尔 (Marc Gravell) 指出:
null 与 DBNull 问题一直是造成混乱的原因;然而,一般来说如果人们说null
在 C# 中,他们打算null
在 SQL 中。这就是 dapper 采用的方法。
这让我相信,当string
被设定为null
,它应该发送DBNull.Value
到 SQLServer。
然而,情况似乎并非如此。发送数据时,我从 SQLServer 返回 0 条记录null
细绳。这似乎表明发送空字符串,而不是DBNull.Value
.
另外,我无法发送DBNull.Value
直接地:
connection.Query<MyObject>("[dbo].[sp_MyStoredProcedure]"), new
{
StartDate: DBNull.Value
}, commandType: CommandType.StoredProcedure);
这会在 Dapper 中产生异常:
System.DBNull 类型的成员 StartDate 不能用作参数值
Question
我怎样才能发送NULL
到 SQLServer,使用 Dapper,当我有string
在 C# 中可以是null
?
重要的
Dapper 确实发送了NULL
当一个字符串是null
。这个假设是我基于错误信息而犯的错误。尽管如此,这个问题可能会对做出同样错误假设的其他人有所帮助。
此外,接受的答案提供了处理可选或条件参数的良好机制。