数据库中有个Time字段,类型为DateTime。可空的。[User]是实体。我现在插入一条记录,但是呢,又必须给Time字段传参。如果用户不输入时间,就得传个NULL过去。这可怎么办啊?[User].Time=Null;编译器是通不过的?而且在读这个为NULL的时间的时候
sdr["Time"]==Dbnull.Value?Null:(dateTime)sdr["Time"];也是通不过的,怎么办啊应该?

解决方案 »

  1.   

    可以在实体[User] = "默认值"
      

  2.   

    修改Time属性为可空类型最简单直接,也有其它办法,这只说可空类型如何使用
    DateTime? Time{get;set;}赋值方法不变,取值方法改为Time.Value即可...
      

  3.   

    我猜你肯定是 .NET 2.0 + 所以用可空类型class User{
    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"];
    }
      

  4.   

    默认值很重要,一般定义属性或者变量的时候,都给默认值,或者你在数据库里给getdate()默认值也行
      

  5.   

    用 DateTime?来声明变量就可以赋值为null了...
    类似的还有int, double这些原始类型
      

  6.   

    第一,因为Time字段是可空的,所以没有默认值。
    第二,必须给Time字段传参。
    第三,给[User].Time=Null,编译器通不过。
    第四,楼上几位写的访问器看不懂,三元运算连:都没有。
    第五,如果如果Time字段为Null,读取数据的时候怎么办?
      

  7.   

    如果向数据库传入空值,就传DBNull.Value就可以了。如果使用DateTimePicker控件输入时候,它有一个ShowCheckBox属性,Checked后时间有效,没有勾选的就是无效的时候或时间为空。
    如果从数据库取出的是空时间,可以把Checked属性设置False表示无效。如果向数据库存入值的时候DateTimePicker的Checked为False则传一个DbNull.Value。如果是其它的方式输入时间比如文本框最好说了,空的直接就是String.Empty。
      

  8.   

    要加引号啊   "null"
      

  9.   

    C#的类型分二种,一种是值类型,一种是引用类型.
    值类型无法赋值为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楼的
      

  10.   

    7楼应该说明白了!!
    在接受参数的地方用DateTime?来声明,即类似:
    public 数据类型 方法名(DateTime? youDateTime,....)
    这样在你插入一条记录时判断,如果没有输入日期,就可以不传参数,这是就默认为null了!!
      

  11.   

    五楼的那个方法,我刚搞明白,惭愧惭愧。
    DateTime加上问号:DateTime?  这样可以付空值。如:[User].time=null;这样就能通过了。
    但是,在插入记录的时候,sqlParameter param[]={new sqlParameter("@time",sqldbtype.datetime);param[0].value=[user].time;
    此时的[User].time是NULL,插入的时候,还是通不过。因为你要么不插入time,要么就插入一个时间,但是不能插入Null(我已经设成可空的了)。
    难道真要赋值一个DateTime.MinValue,才行吗?没有其他办法吗?
      

  12.   

    哎~~ 果然。if([user].time==null)
    {
    pram[1].value=dbnull.value;
    }这样就完事了。