使用DBNull.Value替换null变得更加容易

目录

介绍

背景

使用代码

这是(Update)方法

这是如何使用它

模板代码:泛型

更新——有人问??操作符


介绍

只是一个关于函数的快速提示,该函数将处理所有可为null的类型并使其更容易插入DBNull.Value到数据库中。

背景

很久以前,我在The Weird & the Wonderful上发布了类似的方法,今天我又需要它了。但是,今天我使它变得更好,通过使它成为通用的——采用所有可为空的类型。

使用代码

这是(Update)方法

一位评论员提到我仍然可以使用??操作符。
我忘了,我可以在实际方法中使用合并运算符,因此该方法仅变为一行。简洁啦!

private Object convertDbNull<T>T origValue{
if
origValue == null{
return System.DBNull.Value;
}

返回原始值;
}

private Object convertDbNull<T>(T origValue){
  return (Object)origValue ?? System.DBNull.Value;
}

这是我花在小提示/技巧上的时间最多的一次。😆

这是如何使用它

command.Parameters.AddWithValue("$screenName", convertDBNull(task.screenName));

现在,如果task.screenName == null,则它将转换为DBNull.Value

但是,如果值不是null,则将返回该值并将其插入到数据库中。

模板代码:泛型

此外,由于该方法采用任何可为空的类型(默认情况下String可为空),例如Int32?bool?然后该方法将使用该类型。

不再有转换nullDBNull.Value的烦恼和担忧。

更新——有人问??操作符

我有人发表了一条评论,问为什么以下内容不起作用:

command.Parameters.AddWithValue("$screenName", task.screenName ?? DBNull.Value);

该代码使用null合并运算符,这将是一个非常好的速记。

这正是我希望也能工作的确切代码。唉,它不会编译。

你知道为什么吗?你能明白为什么该代码无法编译吗?它不是很明显,你会得到一个有点神秘的错误,看起来像:

运算符??不能应用于类型为“string”“DBNull”的操作数

它试图指示您正在比较两种不同的类型(stringdbnull),并且编译器无法在null合并运算符上执行此操作。

可以通过使用以下代码将String转换为object来修复该代码:

command.Parameters.AddWithValue("$screenName", (object) task.screenName ?? DBNull.Value);

但是,这就是我的方法所做的,该方法再次处理所有类型。

也许还有其他人认为他们也可以在这里使用合并运算符,他们是对这篇文章投反对票的人?不确定,但这应该可以解决这个问题。

https://www.codeproject.com/Tips/5355559/Making-It-Easier-to-Replace-Null-with-DBNull-Value

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值