在我的数据库,我在我的表可位(布尔)值中的一个几列。他们被允许为NULL,因为字段不总是要包含数据。

我已经通过使用该表,并确保该AllowDBNull字段设置为True创建XSD DataSet的过程中消失了。

然而,当我拉下来记录从数据库到的数据表使用配置的GetData方法,我碰上以下错误:

[InvalidCastException: Conversion from type 'DBNull' to type 'Boolean' is not valid.]

我是否需要指定其他的东西比在列的默认值字段,或者是有一些其他方面的设置?

我在开发阶段还是这个项目,因此,如果改变的字段为char和使用Y / N / NULL选项是首选,我不是太不利走回头路。

有帮助吗?

解决方案

IMHO你不应该允许在一个位/布尔型字段空值。

迈克哈德洛有一个很好的帖子在这里:

http://mikehadlow.blogspot.com/2006/10/nullability -voodoo.html

布尔是通过定义一个双态型。通过使空的,您要添加第三状态。它会回来在某个时刻困扰着你。

其他提示

我有伊恩不同意。三个值逻辑是一样2值逻辑可行的。该负责人表是生是死,或者你不知道他是活着还是死了。如果迈克他的方式,你不能在这里使用了一下。你需要的FK到的状态的表,1 =活着,2 =死亡,3 =未知。

的比特的全部目的是为了节省空间,可以始终使列一个CHAR(1)与约束限制值T或F,Y或N(或U)。

但我认为伊恩被曲解迈克在说什么。小李的不鼓励使用空值的,毕竟他认为,直到处理完成的结束日期栏应为空。他只是说,不灌输在列空值与神秘性质...喜欢它是知道密钥如果一个进程处于某种状态。

在实际上,在一个数据库中的空值有一定的非常有用的副作用。甲骨文(也许其他数据库)没有索引空值。所以如果你有一列只有一个值是非常重要的 - 就像说你有雇员名单你永远不清除,并编入索引的Is_Active_Employee位列。在这种情况下,对于既定的业务,你有过的员工数量为>>>比你现在的员工数量。说你有1%的1个99%0。

这指数99X大于它需要。它索引的所有1的,因为他们是表的1%,但它也装载了0对行,你永远无法使用索引来查找这是罚款。如果你想是所有非活动的员工,索引将被忽略和FTS将被执行。所以,1和NULL会更从数据库的角度更有效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top