Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

La conversione di C# datetime in sql server datetime genera un errore

Il tuo codice, così com'è ora, trasferirà qualsiasi valore a livello di stringa . Questo è un approccio davvero pessimo . Le conversioni implicite in atto dipendono fortemente dalle impostazioni del tuo sistema (lingua e cultura). La parte peggiore è:potrebbe funzionare perfettamente sulla tua macchina mentre la stai testando, ma sul sistema di un cliente si interrompe con strani messaggi. Buon debug :-(

Cambia il tuo codice in questo modo

foreach (PropertyInfo prop in props) {
    // Setting column names as Property names.
    if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
        dataTable.Columns.Add(prop.Name, prop.PropertyType.GetGenericArguments()[0]);
    else
        dataTable.Columns.Add(prop.Name, prop.PropertyType);
}

Ciò aggiungerà la colonna, anche se si tratta di un tipo nullable, con il tipo di dati corretto.

crediti: Questa risposta mi ha aiutato

AGGIORNAMENTO Ancora più semplice

(grazie a Yves M. in un commento sotto la risposta collegata)

foreach (PropertyInfo prop in props) {
    // Setting column names as Property names.
        dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}