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

È stato utile?

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)
         {
            ....
         }
     }
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top