sql >> Base de Datos >  >> RDS >> Sqlserver

La conversión de C# datetime a sql server datetime arroja un error

Su código, tal como está ahora, transferirá cualquier valor a nivel de cadena . Este es un enfoque realmente malo . Las conversiones implícitas que tienen lugar dependen en gran medida de la configuración de su sistema (idioma y cultura). La peor parte es:esto podría funcionar muy bien en su máquina mientras la está probando, pero en el sistema de un cliente se rompe con mensajes extraños. Feliz depuración :-(

Cambia tu código así

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

Esto agregará la columna, incluso si se trata de un tipo anulable, con el tipo de datos correcto.

créditos: Esta respuesta me ayudó

ACTUALIZAR Aún más simple

(gracias a Yves M. en un comentario debajo de la respuesta vinculada)

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