.net - 如何在 XSD 数据集中处理 DBNull 到 bool 值的转换?

标签 .net xsd dataset dbnull

在我的数据库中,我的一个表中有几列是位( bool )值。它们允许为 NULL,因为字段并不总是包含数据。

我已经完成了使用该表创建 XSD 数据集的过程,并确保 AllowDBNull 字段设置为 True。

但是,当我使用配置的 GetData 方法将数据库中的记录拉入数据表时,遇到以下错误:

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

我是否需要在列的 DefaultValue 字段中指定其他内容,或者是否需要设置其他字段?

我这个项目仍处于开发阶段,因此如果首选将字段更改为 char 并使用 Y/N/NULL 选项,我不太反对这样做。

最佳答案

我不同意伊恩的观点。三值逻辑与二值逻辑一样可行。表中的人是活着还是死了,或者你不知道他是活着还是死了。如果迈克有他的办法,你就不能在这里使用一点。您需要一个状态表的 FK,1= 活着,2= 死亡,3= 未知。

该位的全部目的是节省空间,您始终可以将该列设置为 CHAR(1),并使用约束将值限制为 T 或 F、Y 或 N(或 U)。

但我认为伊恩误解了迈克的话。 Mike 并不阻止使用 Null,毕竟他认为 EndDate 列应该为 null,直到该过程完成。他只是说不要在列中注入(inject)具有神秘属性的空值......就像它是了解进程是否处于某种状态的关键一样。

事实上,数据库中的空值具有某些非常有用的副作用。 Oracle(也许其他数据库)不索引空值。因此,如果您有一个列,其中只有一个值很重要 - 例如,您有一个从未清除的员工列表和一个已编制索引的 Is_Active_Employee 位列。在这种情况下,对于一家已建立的企业,您拥有的员工数量>>>比您现在拥有的员工数量。假设您有 1% 的 1 和 99% 的 0。

该索引比实际需要的大 99 倍。它对所有 1 进行索引,这很好,因为它们占表的 1%,但它也为您永远无法使用该索引查找的行加载了 0。如果您想要所有不活跃的员工,则索引将被忽略并执行 FTS。因此,从数据库的角度来看,1 和 NULL 会更有效。

关于.net - 如何在 XSD 数据集中处理 DBNull 到 bool 值的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445136/

相关文章:

python - 将队列拆分为训练/测试集

reporting-services - SSRS 有条件地运行 SQL/DataSet

c# - 覆盖 DateTime.MinValue 导致问题

c# - Visual Studio : generating code upon xsd problems with integers

XSD:指定一个选项必须至少有一个列表,但每个选项不超过一个

spring - 为什么 Spring XSD 会出现 DTD 错误 "White spaces are required between publicId and systemI"

database - 生物信息学数据库有负面结果?

c# - 间歇性 413 : Request Entity Too Large error with ASMX web service over https

c# - 从远程客户端接收文件

c# - 无法访问放置在 wpf 应用程序中另一个程序集中的资源(图像)