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.NullableDateTimeTypepublic 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]));
}
}