Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Die Konvertierung von C#-Datumszeit in SQL-Server-Datumszeit löst einen Fehler aus

Ihr Code - so wie er jetzt ist - wird jeden Wert auf String-Ebene übertragen . Das ist ein wirklich schlechter Ansatz . Die stattfindenden impliziten Konvertierungen hängen stark von den Einstellungen Ihres Systems (Sprache und Kultur) ab. Das Schlimmste ist:Während Sie es testen, funktioniert dies auf Ihrem Computer möglicherweise hervorragend, aber auf dem System eines Kunden bricht es mit seltsamen Meldungen ab. Viel Spaß beim Debuggen :-(

Ändern Sie Ihren Code wie folgt

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);
}

Dadurch wird die Spalte mit dem richtigen Datentyp hinzugefügt, auch wenn es sich um einen Nullable-Typ handelt.

Credits: Diese Antwort hat mir geholfen

UPDATE Noch einfacher

(danke an Yves M. in einem Kommentar unter der verlinkten Antwort)

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