+ -
当前位置:首页 → 问答吧 → C# 中NULL的困惑

C# 中NULL的困惑

时间:2011-12-17

来源:互联网

C# 中很多函数的参数加?号,表示可为空,比如DateTime的,但是这样会导致我插入数据库的时间显示默认时间,不光是时间,所有类型都会显示默认值,string会显示空白,int会显示0,我怎么让它显示默认值为NULL,还有一个疑问就是,NULL,在数据库里面表示的是有值还是没有值,因为我试过了,用不为空的字段用NULL赋值,数据库里面是不报错的,还有一种是字段值直接空白的,请问都有些什么讲究,我有点困惑……

作者: asdxz11   发布时间: 2011-12-17

如果参数是Nullable的,也就是带问号的,对应数据库的字段应该是允许空值,字段不允许空值,对应的方法应该是不带?号的,你可以仔细去查一下,应该如此,

如果你参数中传入null,那么方法会把DBNull写入数据库,数据库相应字段会没有值,

作者: stonespace   发布时间: 2011-12-17

你的第一个问题,显示的问题,可以在显示控件中设置如何显示空值,比如你在winform的datagridview中,可以对某个列设置空值应该如何显示,

作者: stonespace   发布时间: 2011-12-17

不管是页面上市什么值,肯定是可以做处理的,现在程序中没问题,都是经过代码处理的,但是看库里面的话,显得很乱,我就是想空的字段直接显示NULL,而不是默认值,这个有办法处理不?

作者: asdxz11   发布时间: 2011-12-17

几个例子就明白了
int? num;//num可以为0
string? str;//可以为""
而null是不没有分配内存的 ?可以为空意思就是默认值 占有内存

作者: zyloveyrf   发布时间: 2011-12-17

一般不会有string?类型,?只修饰类似int等值类型,因为值类型没有null值,所以要用?让值类型也能有null值,

比如int是值类型,int?就是引用类型了,int?其实是一个类Nullable<int>,和其他引用类型一样,null表示不分配任何内存,

string本身就是引用类型,没必要用string?,因为string本身就有null值,

int? num;

num=null;//此时num不是0,不是默认值,而是null指针,

其实这个写法等于:

Nullable<int> num;

num=null;

作者: stonespace   发布时间: 2011-12-17