日期:2014-05-20  浏览次数:20353 次

关于NULL值,我遇到了非常棘手的问题。请大家帮一下忙。
我刚开始用C#   有些东西不是很清楚,在做一个系统时,经常有3个选择项的记录。

我就把数据库的这一个字段设成BIT类型了。BIT可以存放0,1是两种情况,我看到BIT类型可以存放NULL值,我就顺便让他可以为NULL来做为第三种值。

这样一个BIT就可以存放三个选项。NULL   0   1

但是在使用时我发现麻烦大了,所有的类型都是不能赋NULL值的,像int,bool

如果我把一个字段里的记录取出赋给一个BOOL类型的变量。经过转换成BOOL类型,我发现NULL值被转换成了0。

像这种情况我应该怎么办好呢??是把数据库全改成tinyint呢??还是自定义一种类型呢???  
数据库我都写了一大半了。

------解决方案--------------------
没有必要改类型,用bit就可以解决问题了,你所说的int,bool等不能为null值,你可以用可为空的类型就要以了,比如:
int? a=null;
bool? b=null;

这样当把a,b存到数据库的时候,可以判断当为null的时候,用DBNull.Value来存就可以了,或从数据库中取出的值为DBNull.Value的时候,可以用null给a,b,因为用了"?"后的类型是可空的.

------解决方案--------------------
虽然可以解决问题,但还是强烈建议改类型。 拿bit值保存三个类型就不是一个好的设计。
------解决方案--------------------
如果你要在C#中生成一个对象,那么就不能用bool类型了. 比如: public int type { if( dr[ "字段 "] ==null) { return 1 }else return 1..... } 那为什么在数据库中又不用int非要转换一下呢. 在写设计文档的时候,其他人在看设计文档的时候,思路也会要来个大转弯.
------解决方案--------------------
我觉得还是修改吧,你这样可能可以解决你现在的问题,可是需求改变成为4种可能的情况下就要全盘推翻了,所以建议在现在就修改好设计的字段
------解决方案--------------------
楼主上面的文字说明的情况,我是认为正好和问题相符的.确实.NET在2.0中可以对值类型有可空的设置.
------------
作为C#的一个对象的一个bool 类型的变量,
怎么可能会有三个值呢?
-----------------
对,是对bool不可能有三个值,但是声明成可空的就是三个值了:
bool? 的变量可以有三个值 true,false,null
------解决方案--------------------
用 tinyint
没事别乱把null用作业务逻辑中的某个状态.原因主要是两方面的, 第一,关于业务的数据格式化便于管理.第二,数据库查询性能.