0

マップされるフィールドの1つにDateTimeフィールドがあり、DB内の対応する値に「0000-00-00」または「0001-01-01」がある場合、要求の実行は失敗します。次のエラーが返されます

MySQLの日付/時刻値をSystem.DateTimeに変換できません

そのような値を取得する可能性はありますか?

「DateTime?」を指定しようとしました。プロパティタイプとしての値-それも役に立ちません(実際、私はそれが役立つとは思っていませんでした)。

PS私はMySql5.1を使用しています

4

3 に答える 3

2

NHibernateを使用して同様の問題が発生しましたが、例外として同じエラーが発生しました。

これは、特にDATE NOT NULL列のデフォルト値として0000-00-00を使用して、DATEフィールドで無効な日付を許可するというMySQL独自の「機能」によるものです。このような日付が発生すると、それ自体をDateTimeに変換するときに例外がスローされます。

これに対する提案された解決策は、追加することでした

ゼロ日時を許可=True;

接続文字列に、しかし実際にはこれは私にとってはうまくいきませんでした。私は最終的に接続文字列を追加することで問題を解決しました

ゼロ変換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"/>

于 2011-05-31T17:17:18.907 に答える
1

MapValue属性を試しましたか?これがうまくいくかどうかはわかりませんが...

[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
于 2011-04-06T06:24:02.673 に答える
0

私はあなたが別のプロパティによってそれを制御する必要があると思います。

 [MapField("the_date")]
 public DateTime? theDate; // Map
 [MapIgnore]
 public DateTime theDateControl
 {
     set {
         if(theDate.HasValue)
         {
            ....
         }
     }
 }
于 2014-10-27T04:19:11.323 に答える