BLToolKit: come a prendere 'vuoto' datetime campo?
Domanda
Richiesta Execute è fallito se uno dei campi da mappare ha DateTime campo e il valore corrispondente DB ha '0000-00-00' o '0001-01-01'. Il seguente errore viene restituito
Impossibile convertire MySQL valore di data / ora per System.DateTime
C'è qualche possibilità di recuperare tale valore?
ho cercato di specificare il 'DateTime?' valore come tipo di proprietà -. non aiuta troppo (in realtà, non mi aspettavo che per essere utile)
P.S. Io uso MySQL 5.1
Soluzione
mi sono imbattuto in un problema simile con NHibernate con lo stesso errore in un'eccezione.
E 'a causa di "funzionalità" unica di MySQL di permettere date non valide in un campo data, in particolare utilizzando 0000-00-00 come un valore predefinito per data non colonne NULL. Quando si incontra un tale data, esso genera un'eccezione quando si converte in un DateTime.
La soluzione suggerita per questo è stato quello di aggiungere
Consentire Zero Datetime = true;
alla stringa di connessione, ma in pratica questo non ha funzionato per me. Alla fine ho risolto il problema modificando la stringa di connessione aggiungendo
Converti Zero DateTime = true;
in modo che il tratto app.config sarebbe simile a questo
<connectionStrings>
<add
name="ConnectionString.MySql"
connectionString="Server=localhost;Port=3306;Database=BLT;Uid=someuser;Convert Zero DateTime=true;"
providerName="MySql.Data.MySqlClient"/>
Altri suggerimenti
Hai provato l'attributo MapValue? Non sono sicuro se questo funzionerà ma ...
[MapValue(null, "0000-00-00")]
[MapValue(null, "0001-01-01")]
public DateTime? theDate;
Credo che bisogna controllarlo da un altro immobile.
[MapField("the_date")]
public DateTime? theDate; // Map
[MapIgnore]
public DateTime theDateControl
{
set {
if(theDate.HasValue)
{
....
}
}
}