BLToolKit:如何获取'空'日期时间字段?

时间:2010-11-27 04:18:43

标签: mysql bltoolkit

如果要映射的字段之一具有DateTime字段且DB中的对应值具有“0000-00-00”或“0001-01-01”,则

请求执行失败。返回以下错误

  

无法将MySQL日期/时间值转换为System.DateTime

是否有可能取得这样的价值?

我试过指定'DateTime?'值作为属性类型 - 它也没有帮助(实际上,我没想到会有所帮助)。

P.S。我使用MySql 5.1

3 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,使用NHibernate在异常中使用相同的错误。

这是由于MySQL在DATE字段中允许无效日期的独特“功能”,特别是使用0000-00-00作为DATE NOT NULL列的默认值。遇到这样的日期时,它会在将自身转换为DateTime时抛出异常。

建议的解决方案是添加

允许零日期时间=真;

连接字符串,但实际上这对我不起作用。我最终通过改变连接字符串添加

解决了这个问题

转换零日期时间=真;

所以你的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 :(得分:1)

您是否尝试过MapValue属性?我不确定这是否有用但是......

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

答案 2 :(得分:0)

我认为你必须由另一个财产控制它。

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