如何使用SqlDataRecord处理Nullable类型
-
28-10-2019 - |
题
我正在解析XML(LINQ to XML),并且在元素/属性为空的情况下使用了可为空的类型(int?
和decimal?
)。但是,在构建要传递给数据库的集合(使用TVP)时,我不知道如何处理该值实际上为null的情况。我不能将空值传递给SqlDataRecord SetInt32或SetDecimal,并且我不想将其设置为零。...我实际上希望它为空。
告诉我int
没有过多负担吗?
下面的计数是可为空的类型(int?
计数)
通用标签
有什么主意如何处理而不传递零(保持null)?
解决方案
扩展方法: 通用标签
或者按照D Stanley的建议使用SetSqlInt32
:
通用标签
请注意,2013年12月9日:基于评论,我回到了这个答案,我注意到有一个小的改进机会,这是基于埃里克·利珀特(Eric Lippert)关于可为空的微优化的系列文章的,该系列可以在 http://ericlippert.com/2012/12/20/nullable-micro-optimizations-part-一个/ 。
简而言之,尽管Value
属性需要较少的键入,因此对于程序员来说可以说是最佳选择,但如果HasValue为false,则它必须引发异常。另一方面,GetValueOrDefault()
方法是一种简单的字段访问方法。因此,GetValueOrDefault()
需要较少的指令,并且更有可能被内联,因此对于编译器和处理器而言是最佳选择。
其他提示
我从未使用过SqlDataRecord
,但是当使用DataTable
和DataRow
或使用参数化查询时,我使用通用分类标记代码。
使用null
,看起来您可以使用 DBNull.Value
方法。
应使用SetSqlInt32
代替SetString
。试试
通用标签
// Ive在检查或处理可为空的类型时发现这对我来说是最好的 //在我的示例中,我正在检查存储在String []数组中的值 通用标签
也许您可以尝试以下方法。 通用标签