这是怎么回事???真是莫名其妙!!

时间:2022-09-20 10:13:45
数据库的多个字段都不能为空,设计的窗体中有一DateTimePicker,当往数据库insert数据时,如果不包含DateTimePicker的value时,插入空的值时会报错,但当加入DateTimePicker的value时,却可以插入空值到数据库中而不报错了,怎么会这样?????

5 个解决方案

#1


没用过你说的那个控件
我感觉你插入数据库的值是 ""..

#2


空值和null好像是有区别的

#3


null 与 没有数值 是有分别的。
所谓不允许为空就是要有值。

#4


以下是我做的试验,编译时报错:
1、问题一
第一种情况:this.dateTimePicker1.Value = null;
error report:无法将 NULL 转换成“System.DateTime”,因为它是一种数值类型

第二种情况:this.dateTimePicker1.Value = "";
error report:无法将类型“string”隐式转换为“System.DateTime”

第三种情况:this.dateTimePicker1.Value = System.DBNull.Value;
error report:无法将类型“System.DBNull”隐式转换为“System.DateTime”

这三种情况都属于类型转换引发异常,故编译出错。也就说明了你上面提出的“当往数据库insert数据时,如果不包含DateTimePicker的value时,插入空的值时会报错”的问题所在。

问题二:
“但当加入DateTimePicker的value时,却可以插入空值到数据库中?”DateTimePicker的value得到的是一个DateTime类型的值。你数据库对应的字段也是时间类型,所以insert不会出错了。

还有,你用DateTimePicker的value时,怎么会取到空值,这个控件默认是系统时间啊????


#5


初始化:
this.dateTimePicker1.Value = Convert.ToDateTime("9999-12-31 00:00:00");


存数据库的时候:
if(this.dateTimePicker1.Value == Convert.ToDateTime("9999-12-31 00:00:00"))
{
    //。。。。。
    ........= DBNull.Value;
    //。。。。。。
}
else
{
    //。。。。。
    ........= this.dateTimePicker1.Value;
    //。。。。。。
}

#1


没用过你说的那个控件
我感觉你插入数据库的值是 ""..

#2


空值和null好像是有区别的

#3


null 与 没有数值 是有分别的。
所谓不允许为空就是要有值。

#4


以下是我做的试验,编译时报错:
1、问题一
第一种情况:this.dateTimePicker1.Value = null;
error report:无法将 NULL 转换成“System.DateTime”,因为它是一种数值类型

第二种情况:this.dateTimePicker1.Value = "";
error report:无法将类型“string”隐式转换为“System.DateTime”

第三种情况:this.dateTimePicker1.Value = System.DBNull.Value;
error report:无法将类型“System.DBNull”隐式转换为“System.DateTime”

这三种情况都属于类型转换引发异常,故编译出错。也就说明了你上面提出的“当往数据库insert数据时,如果不包含DateTimePicker的value时,插入空的值时会报错”的问题所在。

问题二:
“但当加入DateTimePicker的value时,却可以插入空值到数据库中?”DateTimePicker的value得到的是一个DateTime类型的值。你数据库对应的字段也是时间类型,所以insert不会出错了。

还有,你用DateTimePicker的value时,怎么会取到空值,这个控件默认是系统时间啊????


#5


初始化:
this.dateTimePicker1.Value = Convert.ToDateTime("9999-12-31 00:00:00");


存数据库的时候:
if(this.dateTimePicker1.Value == Convert.ToDateTime("9999-12-31 00:00:00"))
{
    //。。。。。
    ........= DBNull.Value;
    //。。。。。。
}
else
{
    //。。。。。
    ........= this.dateTimePicker1.Value;
    //。。。。。。
}