首页 / 知识
关于c#:处理DBNull的最佳方法是什么
2023-04-13 03:55:00

What is the best way to deal with DBNull's
我经常在处理从
在这种情况下处理 可空类型是好的,但仅适用于不可为空的类型。 要使类型"可为空",请在类型后附加一个问号,例如:
我还建议使用" 我建议做这样的事情
在上述情况下,如果 如果您没有使用可空类型,最好的办法是检查列的值是否为DBNull。如果它是DBNull,则将您的引用设置为对相应数据类型使用null / empty的引用。
就像Manu所说的那样,您可以使用每种类型的重载convert方法创建一个convert类,这样就不必在if / else块中添加代码了。 但是,我会强调,如果可以使用可空类型,那是更好的选择。原因在于,对于非可空类型,您将不得不求助于"魔术数字"来表示null。例如,如果要将列映射到int变量,将如何表示DBNull?通常你不能使用0,因为0在大多数程序中都有有效含义。我经常看到人们将DBNull映射到int.MinValue,但这也可能存在问题。我最好的建议是:
可以使用可空类型来解决这个问题。话虽如此,如果您使用的是较旧版本的框架,或者是为不使用可空类型的人工作的,那么代码示例将解决问题。 我总是使用If / Else检查版本,只有三元运算符才能清楚,简洁,无问题。将所有内容保留在一行中,包括如果列为空则指定默认值。 因此,假设名为"MyCol"的可为空的Int32列,如果列为null,则返回-99,但如果列不为null,则返回整数值:
它与上面的If / Else获胜者的方法相同 - 但我发现如果你从一个数据加载器中读取多个列,这是一个真正的奖励,所有列读取行都在另一个下面,排成一行,因为它是更容易发现错误:
添加对 这将是这样的:
如果您可以控制返回结果的查询,则可以使用ISNULL()返回非空值,如下所示:
如果您的情况可以容忍这些不可思议的值来代替NULL,则采用这种方法可以解决整个应用程序中的问题,而不会使代码混乱。
值得一提的是, 你可以利用这个优势:
但是,这仅适用于字符串,对于其他所有我将使用linq方式或扩展方法。对于我自己,我编写了一个小的扩展方法来检查DBNull,甚至通过
DBNull像其他一样实现.ToString()。无需做任何事情。而不是硬强制转换,调用对象的.ToString()方法。
这成了:
DBNull.ToString()返回string.Empty 我想这是你正在寻找的最佳实践 通常在使用DataTables时你必须处理这种情况,其中row字段可以是null或DBNull,通常我会像这样处理:
'as'运算符为无效的强制转换返回null,比如DBNull为string,'??'回报 您还应该查看扩展方法。以下是一些处理此场景的示例。 推荐阅读
就在几天前,布拉德艾布拉姆斯发布了一些相关信息 在摘要"AVOID using System.DBNull。Prefer Nullable"。 这是我的两分钱(未经测试的代码:))
还有一个问题......你有没有使用ORM的原因? 由于某种原因,我在对DBNull.Value进行检查时遇到了问题,因此我做了一些稍有不同的事情,并利用了DataRow对象中的一个属性:
我通常编写自己的ConvertDBNull类,该类包装内置的Convert类。如果值为DBNull,则它的引用类型为null,否则为默认值。 您还可以使用Convert.IsDBNull(MSDN)进行测试。 如果您担心在期望字符串时获取DBNull,则可以选择将DataTable中的所有DBNull值转换为空字符串。 这样做非常简单,但它会增加一些开销,尤其是在处理大型DataTable时。如果您有兴趣,请查看显示如何操作的链接 |
最新内容
相关内容
python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python列表有哪些常用方法?
python列表有哪些常用方法?,位置,方法,培训,列表,语法,元素,示例,对象,以上,参数,列表是最常用的Python数据类型,它可以作为一个方括号内的逗Python如何创建对象,有哪些方法
Python如何创建对象,有哪些方法,培训,对象,方法,内容,函数,属性,所在,以上,以下,功能,以下介绍Python创建对象的9种方法。classPoint:def__iniPython静态函数和普通方法的区别
Python静态函数和普通方法的区别,培训,方法,静态,区别,实例,函数,属性,结果,例子,下面,下面通过一个例子,讲解Python静态函数、普通方法、类方python中什么是类方法
python中什么是类方法,培训,方法,实例,静态,定义,参数,函数,内部,变量,属性,python中的类方法,指的是在类中定义的函数,函数在类的内部称为方法python类对象和实例对象是一样的吗
python类对象和实例对象是一样的吗,地址,概念,下来,数据,培训,实例,对象,方法,属性,变量,python面向对象最重要的概念就是类(Class)和实例(Inpython看类里有哪些方法
python看类里有哪些方法,信息,员工,培训,名称,方法,函数,冒号,字符串,语句,结尾,python使用class语句来创建一个新类,class之后为类的名称并以python怎么调用方法
python怎么调用方法,系统,培训,方法,参数,法名,定义,列表,实例,以上,函数,python调用的方法类的方法的定义1、定义一个类deffun_name(self,..python对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的python调用方法必须实例化么
python调用方法必须实例化么,代码,培训,方法,静态,工厂,参数,程序,对象,实例,定义,python类中的实例方法和静态方法,在调用时,是有区别的。静态python调用本类方法
python调用本类方法,培训,方法,定义,静态,实例,关键字,以上,更多,内容,python如何调用本类方法要想调用类中的方法,首先要定义一个类,python中python如何实例化一个对象
python如何实例化一个对象,培训,名称,实例,括号,关键字,对象,函数,字母,方式,以上,python中同样使用关键字class创建一个类,类名称第一个字母