数据库中有个Time字段,类型为DateTime。可空的。[User]是实体。我现在插入一条记录,但是呢,又必须给Time字段传参。如果用户不输入时间,就得传个NULL过去。这可怎么办啊?[User].Time=Null;编译器是通不过的?而且在读这个为NULL的时间的时候
sdr["Time"]==Dbnull.Value?Null:(dateTime)sdr["Time"];也是通不过的,怎么办啊应该?
sdr["Time"]==Dbnull.Value?Null:(dateTime)sdr["Time"];也是通不过的,怎么办啊应该?
DateTime? Time{get;set;}赋值方法不变,取值方法改为Time.Value即可...
public DateTime? Time { get; set; }
}简单用法:
user.Time = null; // 默认就是 null
if(user.Time.HasValue) {
DateTime time = user.Time.Value.Add(-1);
}if(sdr["Time"]!=DBNull.Value) {
user.Time = (DateTime)sdr["Time"];
}
类似的还有int, double这些原始类型
第二,必须给Time字段传参。
第三,给[User].Time=Null,编译器通不过。
第四,楼上几位写的访问器看不懂,三元运算连:都没有。
第五,如果如果Time字段为Null,读取数据的时候怎么办?
如果从数据库取出的是空时间,可以把Checked属性设置False表示无效。如果向数据库存入值的时候DateTimePicker的Checked为False则传一个DbNull.Value。如果是其它的方式输入时间比如文本框最好说了,空的直接就是String.Empty。
值类型无法赋值为null.只有引用类型才能这样初始化
如 int i=null;报同样的错,只是int这些类型编译时默认会初始化为 0
所以2.0以后引入了可空值-- sdr["Time"]==Dbnull.Value?Null:(dateTime)sdr["Time"];也是通不过的,怎么办啊应该?
这个time字断为空时你同样赋值为null了.要处理这种错误有二种办法 ,[User].Time
一种是把Time字段改为可空值,一种是若值为DbNull.Value赋予一个默认的值
如
sdr["Time"]==Dbnull.Value? DateTime.MinValue:(dateTime)sdr["Time"];关于可空值类型,见5楼的
在接受参数的地方用DateTime?来声明,即类似:
public 数据类型 方法名(DateTime? youDateTime,....)
这样在你插入一条记录时判断,如果没有输入日期,就可以不传参数,这是就默认为null了!!
DateTime加上问号:DateTime? 这样可以付空值。如:[User].time=null;这样就能通过了。
但是,在插入记录的时候,sqlParameter param[]={new sqlParameter("@time",sqldbtype.datetime);param[0].value=[user].time;
此时的[User].time是NULL,插入的时候,还是通不过。因为你要么不插入time,要么就插入一个时间,但是不能插入Null(我已经设成可空的了)。
难道真要赋值一个DateTime.MinValue,才行吗?没有其他办法吗?
{
pram[1].value=dbnull.value;
}这样就完事了。