最近在一个Asp.Net项目中,对数据处理采用的方式如下:查询数据/绑定DataGrid用DataSet或DataReader,对于数据的新增/修改/删除,则使用实体类+SQL语句+参数的处理方式。
但在处理过程中,遇到一个棘手的问题是如何处理日期型参数。原因如下:如果在实体类中与数据表日期字段相对应的属性定义为DateTime,那么,对于在数据维护中,无法做到对应的数据字段日期为空,相反会是数据库中日期的最小值。(在我使用的Oracle数据库中,是"1899-12-31")。具体原因是C#实体类中,DateTime类型的属性有默认值是"1-1-1",所以在该类初始化时该属性已有值,所以就算在数据维护中,没有对该属性做任何改动,该属性也不是我们所希望的Null值,而是"1-1-1",对应的数据表中也就是最小的日期值"1899-12-31"。
正确的解决方法是:在实体类中,不定义DateTime类型的属性,用string类型代替。但在对DbParameter进行赋值时进行相关的判断:
![](https://i-blog.csdnimg.cn/blog_migrate/25a118906b4c4bf9099f322df76822ab.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f69d56e7f0997a322d774d0a20733115.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f795e5c231e026f809c591286e7c54cc.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/eef47bece69cf70fa5854caff57c347f.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/25a118906b4c4bf9099f322df76822ab.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f69d56e7f0997a322d774d0a20733115.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f795e5c231e026f809c591286e7c54cc.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/eef47bece69cf70fa5854caff57c347f.gif)
其中:GetOleDbParamter函数如下
![](https://i-blog.csdnimg.cn/blog_migrate/25a118906b4c4bf9099f322df76822ab.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d5b7d70de717dc25c309ff1179e2bee9.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f69d56e7f0997a322d774d0a20733115.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d942465fd68827919d4e0870b9af7432.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f795e5c231e026f809c591286e7c54cc.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/51f8a4e08559aa460ac7e91f964d96ec.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/52857dcfe295ba16fa96d1ef24f2f0ed.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d942465fd68827919d4e0870b9af7432.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f795e5c231e026f809c591286e7c54cc.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f795e5c231e026f809c591286e7c54cc.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f795e5c231e026f809c591286e7c54cc.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4fc703914908cc5d93f1acc3d3043ba6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/eef47bece69cf70fa5854caff57c347f.gif)