问个DateTime和NULL的问题?

yasire 2009-07-09 09:19:21
数据库中有个Time字段,类型为DateTime。可空的。[User]是实体。

我现在插入一条记录,但是呢,又必须给Time字段传参。如果用户不输入时间,就得传个NULL过去。这可怎么办啊?

[User].Time=Null;编译器是通不过的?

而且在读这个为NULL的时间的时候
sdr["Time"]==Dbnull.Value?Null:(dateTime)sdr["Time"];也是通不过的,怎么办啊应该?
...全文
2379 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yasire 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 i_am_kevin 的回复:]
DBNull.Value的使用
[/Quote]
哎~~ 果然。
if([user].time==null)
{
pram[1].value=dbnull.value;
}


这样就完事了。
yasire 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 windinwing 的回复:]
一种是把Time字段改为可空值,一种是若值为DbNull.Value赋予一个默认的值

sdr["Time"]==Dbnull.Value? DateTime.MinValue:(dateTime)sdr["Time"];
[/Quote]
五楼的那个方法,我刚搞明白,惭愧惭愧。
DateTime加上问号:DateTime? 这样可以付空值。如:[User].time=null;这样就能通过了。
但是,在插入记录的时候,
sqlParameter param[]={new sqlParameter("@time",sqldbtype.datetime);param[0].value=[user].time;
此时的[User].time是NULL,插入的时候,还是通不过。因为你要么不插入time,要么就插入一个时间,但是不能插入Null(我已经设成可空的了)。
难道真要赋值一个DateTime.MinValue,才行吗?没有其他办法吗?
I_am_kevin 2009-07-10
  • 打赏
  • 举报
回复
DBNull.Value的使用
koukoujiayi 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yasire 的回复:]
没人看回复吗?每一个看明白的!
[/Quote]
7楼应该说明白了!!
在接受参数的地方用DateTime?来声明,即类似:
public 数据类型 方法名(DateTime? youDateTime,....)
这样在你插入一条记录时判断,如果没有输入日期,就可以不传参数,这是就默认为null了!!
windinwing 2009-07-10
  • 打赏
  • 举报
回复
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楼的
yasire 2009-07-10
  • 打赏
  • 举报
回复
没人看回复吗?每一个看明白的!
frooyfrooy3 2009-07-10
  • 打赏
  • 举报
回复
要加引号啊 "null"
北京的雾霾天 2009-07-10
  • 打赏
  • 举报
回复
如果向数据库传入空值,就传DBNull.Value就可以了。

如果使用DateTimePicker控件输入时候,它有一个ShowCheckBox属性,Checked后时间有效,没有勾选的就是无效的时候或时间为空。
如果从数据库取出的是空时间,可以把Checked属性设置False表示无效。如果向数据库存入值的时候DateTimePicker的Checked为False则传一个DbNull.Value。

如果是其它的方式输入时间比如文本框最好说了,空的直接就是String.Empty。
爱德华马 2009-07-10
  • 打赏
  • 举报
回复
谁说可空的就没有默认值了?
yasire 2009-07-10
  • 打赏
  • 举报
回复
自己顶!~
yasire 2009-07-09
  • 打赏
  • 举报
回复
第一,因为Time字段是可空的,所以没有默认值。
第二,必须给Time字段传参。
第三,给[User].Time=Null,编译器通不过。
第四,楼上几位写的访问器看不懂,三元运算连:都没有。
第五,如果如果Time字段为Null,读取数据的时候怎么办?
龙翔飞雪 2009-07-09
  • 打赏
  • 举报
回复
用 DateTime?来声明变量就可以赋值为null了...
类似的还有int, double这些原始类型
yanlong521521 2009-07-09
  • 打赏
  • 举报
回复
默认值很重要,一般定义属性或者变量的时候,都给默认值,或者你在数据库里给getdate()默认值也行
Jinglecat 2009-07-09
  • 打赏
  • 举报
回复
我猜你肯定是 .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"];
}
gdjlc 2009-07-09
  • 打赏
  • 举报
回复
可以啊
fanglong168 2009-07-09
  • 打赏
  • 举报
回复
如果用户不输入时间,你就默认时间是用户填写信息时的时间,然后在传参,不知道这样可行吗?
kkun_3yue3 2009-07-09
  • 打赏
  • 举报
回复
修改Time属性为可空类型最简单直接,也有其它办法,这只说可空类型如何使用
DateTime? Time{get;set;}

赋值方法不变,取值方法改为Time.Value即可...
gdjlc 2009-07-09
  • 打赏
  • 举报
回复
可以在实体[User] = "默认值"

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧