BLToolKit: Wie holen ‚leeren‘ Datetime-Feld?
Frage
Die Anforderung ist fehlgeschlagen Execute wird, wenn man von Feldern zugeordnet werden muss Datetime-Feld und den entsprechenden Wert in DB hat ‚0000-00-00‘ oder ‚0001-01-01‘. Der folgende Fehler wird zurückgegeben
Nicht imstande MySQL Datum / Zeit-Wert zu System.DateTime
zu konvertieren
Gibt es eine Möglichkeit, einen solchen Wert zu holen?
Ich habe versucht, die angeben, "Datetime? Wert als Objekttyp -. es nicht allzu hilft (eigentlich habe ich nicht erwartet, dass hilfreich sein)
P. S. Ich verwende MySql 5.1
Lösung
stieß ich auf ein ähnliches Problem mit NHibernate mit dem gleichen Fehler in einer Ausnahme.
Es ist aufgrund MySQL einzigartigen „Feature“ ungültiger Daten in einem DATE-Feld ermöglicht, insbesondere 0000-00-00 als Standardwert für DATE NOT NULL-Spalten verwenden. Wenn ein solches Datum festgestellt wird, ist es eine Ausnahme auslöst, wenn sich in ein Datetime zu konvertieren.
Die vorgeschlagene Lösung für dieses Add war zu
Lassen Sie Null für Datum und Uhrzeit = true;
zu der Verbindungszeichenfolge, jedoch in dieser Praxis nicht für mich arbeiten. Ich löste schließlich das Problem, indem die Verbindungszeichenfolge zu ändern Hinzufügen
Konvertieren Null Datetime = true;
so Ihr app.config Abschnitt in etwa so aussehen würde
<connectionStrings>
<add
name="ConnectionString.MySql"
connectionString="Server=localhost;Port=3306;Database=BLT;Uid=someuser;Convert Zero DateTime=true;"
providerName="MySql.Data.MySqlClient"/>
Andere Tipps
Haben Sie versucht, das MapValue Attribut? Ich bin nicht sicher, ob dies funktionieren wird, aber ...
[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
Ich glaube, Sie sie durch eine andere Eigenschaft steuern müssen.
[MapField("the_date")]
public DateTime? theDate; // Map
[MapIgnore]
public DateTime theDateControl
{
set {
if(theDate.HasValue)
{
....
}
}
}