2010-11-27 73 views
0

如果其中一個要映射的字段具有DateTime字段,並且數據庫中的對應值具有'0000-00-00'或'0001-01-01',則請求執行失敗。返回以下錯誤BLToolKit:如何獲取'空'日期時間字段?

無法MySQL的日期/時間值轉換爲System.DateTime

是否有可能獲取這樣的價值呢?

我試過指定'DateTime?'價值作爲財產類型 - 它也沒有幫助(實際上,我沒有想到會有所幫助)。

P.S.我使用MySql 5.1

回答

2

我遇到了一個類似的問題使用NHibernate與異常相同的錯誤。

這是由於MySQL在DATE字段中允許無效日期的獨特「功能」,特別是使用0000-00-00作爲DATE NOT NULL列的默認值。遇到這樣的日期時,它將自身轉換爲DateTime時會引發異常。

此所建議的解決方案是添加

允許零日期時間= TRUE;

連接字符串,但實際上這並不適用於我。我最終通過改變連接字符串來添加

Convert DateTime = true;

讓你的app.config節將是這個樣子

<connectionStrings> 
<add 
    name="ConnectionString.MySql" 
    connectionString="Server=localhost;Port=3306;Database=BLT;Uid=someuser;Convert Zero DateTime=true;" 
    providerName="MySql.Data.MySqlClient"/> 

1

您是否嘗試過MapValue屬性?我不知道這是否會工作,但...

[MapValue(null, "0000-00-00")] 
[MapValue(null, "0001-01-01")] 
public DateTime? theDate; 
+0

沒有嘗試,但謝謝。 – Budda 2011-06-03 01:47:13

0

我認爲你必須通過另一個屬性來控制它。

[MapField("the_date")] 
public DateTime? theDate; // Map 
[MapIgnore] 
public DateTime theDateControl 
{ 
    set { 
     if(theDate.HasValue) 
     { 
      .... 
     } 
    } 
}