Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La conversion de datetime C # en datetime de serveur sql génère une erreur

Votre code - tel qu'il est maintenant - transférera n'importe quelle valeur au niveau de la chaîne . C'est une très mauvaise approche . Les conversions implicites qui ont lieu dépendent fortement des paramètres de votre système (langue et culture). Le pire, c'est que cela peut très bien fonctionner sur votre ordinateur pendant que vous le testez, mais sur le système d'un client, il se brise avec des messages étranges. Bon débogage :-(

Modifiez votre code comme ceci

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

Cela ajoutera la colonne - même s'il s'agit d'un type nullable - avec le type de données correct.

crédits : Cette réponse m'a aidé

MISE À JOUR Encore plus simple

(merci à Yves M. dans un commentaire sous la réponse liée)

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