在NHibernate中应用Mysql正为空日期的问题困扰

Unable to convert MySQL date/time value to System.DateTime
相信这个问题很多人都会看到的。在mySql数据库中这类日期都是“0000-0-0”。设置 allow zero datetime=true,这类日期在 connector-net-5.1.4返回一个MySqlDateTime类型,值自然是0000-0-0,Nullables.NHibernate得到这个值时尝试转换为日期
public   override   object  Get(IDataReader rs,  int  index)
{
       
return new NullableDateTime(Convert.ToDateTime(rs[index]));//rs[index]是一个MySqlDateTime的object
}
这时会抛出上面的错误。

如果在连接字符串中不设置“ allow zero datetime=true”,那在判断是否是DBNull时就抛出上面的错误
int  index  =  rs.GetOrdinal(name);

            
if  (rs.IsDBNull(index))
            
{
                
if (IsDebugEnabled)
                
{
                    Log.Debug(
"returning null as column: " + name);
                }

                
// TODO: add a method to NullableType.GetNullValue - if we want to
                
// use "MAGIC" numbers to indicate null values
                return null;
            }

            
else
            
{
                
object val = null;
                
try
                
{
                    val 
= Get(rs, index);
                }
.
}

以为下载了 connector-net的源代码就能找到解决的方法,没想到工程有一个项目打不开,编译的DLL又无法加到GAC去,只好又回头去改 Nullables.NHibernate.NullableDateTimeType
public   override   object  Get(IDataReader rs,  int  index)
{
    
//return new NullableDateTime(Convert.ToDateTime(rs[index]));
    
//kevin Modify
    object obj = rs[index];
    
string strName = obj.GetType().ToString();            
    
if (strName == "MySql.Data.Types.MySqlDateTime")
    
{
        
string strVal = obj.ToString();
        
if (strVal.StartsWith("0000-0-0"))
            
return null;
        
else
            
return new NullableDateTime(Convert.ToDateTime(strVal));
    }

    
else
    
{
        
return new NullableDateTime(Convert.ToDateTime(rs[index]));
    }

}

转载于:https://www.cnblogs.com/kevin-Y/archive/2007/12/06/985840.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值