技术提高能力,沟通开拓视野

统计

留言簿(2)

积分与排名

阅读排行榜

评论排行榜

C#中日期型参数为空的处理方法

最近在一个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进行赋值时进行相关的判断:
if((Cargo.Customer_Date != ""&& (Cargo.Customer_Date != null))
  {
          odp[
8= GetOleDbParamter("CUSTOMER_DATE",OleDbType.Date,Cargo.Customer_Date);
   }
   
else
  {
        odp[
8= GetOleDbParamter("CUSTOMER_DATE",OleDbType.Date,System.DBNull.Value);
   }

其中:GetOleDbParamter函数如下
 //创建OleDbParameter
  #region
 
public static OleDbParameter GetOleDbParamter(string paramName,OleDbType dbType,object paramValue)
    {        
       OleDbParameter param 
= new OleDbParameter(paramName,dbType);
       param.Value 
= paramValue;
      
return param;
    }
 
#endregion

posted on 2007-10-23 21:19 Alligator 阅读(1200) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。