gpt4 book ai didi

c# - 如何使用 Dapper 将字符串作为 NULL 发送到 SQLServer?

转载 作者:可可西里 更新时间:2023-11-01 08:07:55 27 4
gpt4 key购买 nike

我有一个场景,其中 C# 中的字符串可以是 null。我需要它在 SQLServer 上为 NULL

我使用 Dapper 将其发送到 SQLServer,查询如下:

connection.Query<MyObject>("[dbo].[sp_MyStoredProcedure]"), new
{
StartDate: startDate
}, commandType: CommandType.StoredProcedure);

其中 startDate 是有时可以等于 null 的字符串。

存储过程的参数是

@StartDate varchar(10) = NULL

当它为NULL 时,它返回所有记录。我已通过 SSMS 确认此行为有效。

我读了this post Marc Gravell 说:

The null vs DBNull issue is a constant cause of confusion; however, generally if people say null in C# they intend null in SQL. This is the approach that dapper adopts.

这让我相信当 string 设置为 null 时,它应该将 DBNull.Value 发送到 SQLServer。

然而,事实并非如此。发送 null 字符串时,我从 SQLServer 返回了 0 条记录。这似乎表示发送一个空字符串,而不是 DBNull.Value

此外,我无法直接发送 DBNull.Value:

connection.Query<MyObject>("[dbo].[sp_MyStoredProcedure]"), new
{
StartDate: DBNull.Value
}, commandType: CommandType.StoredProcedure);

这会在 Dapper 中产生异常:

The member StartDate of type System.DBNull cannot be used as a parameter value

问题

当我在 C# 中有一个可以为 nullstring 时,如何使用 Dapper 将 NULL 发送到 SQLServer?


重要

当字符串为 null 时,Dapper 确实会发送 NULL。这个假设是我基于错误信息的错误。尽管如此,这个问题可能有助于帮助做出同样错误假设的其他人。

此外,已接受的答案提供了处理可选或条件参数的良好机制。

最佳答案

是的,dapper 知道在看到它时将 reference-null 替换为 DBNull.Value。因为 DBNull 是我的宿敌,如果我再也没有在我的应用程序代码中看到它(库代码不同),我会死得更开心一点。

另请参阅:https://stackoverflow.com/a/9632050/23354

关于c# - 如何使用 Dapper 将字符串作为 NULL 发送到 SQLServer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21631263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com