Bltoolkit:「空の」データタイムフィールドを取得する方法は?
質問
マッピングされるフィールドの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)
{
....
}
}
}
所属していません StackOverflow