Bltoolkit:「空の」データタイムフィールドを取得する方法は?

StackOverflow https://stackoverflow.com/questions/4290106

  •  28-09-2019
  •  | 
  •  

質問

マッピングされるフィールドの1つがデータタイムフィールドを持ち、DBの対応する値に「0000-00-00」または「0001-01-01」がある場合、リクエスト実行は失敗します。次のエラーが返されます

mysqlの日付/時刻値をsystem.dateTimeに変換できません

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

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

PS私はmysql 5.1を使用します

役に立ちましたか?

解決

例外として同じエラーでNhibernateを使用して同様の問題に出会いました。

これは、特にnull列ではなく日付のデフォルト値として0000-00-00を使用する日付フィールドで無効な日付を許可するという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"/>

他のヒント

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

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

別の財産でそれを制御しなければならないと思います。

 [MapField("the_date")]
 public DateTime? theDate; // Map
 [MapIgnore]
 public DateTime theDateControl
 {
     set {
         if(theDate.HasValue)
         {
            ....
         }
     }
 }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top