0 votes

Obtenir un débordement SqlDateTime dans SqlBulkCopy.WriteToServer()

J'insère des données d'un ensemble de données typées dans ma base de données MSSQL en utilisant la classe SqlBuldCopy :

foreach (DataTable dt in ds.Tables)
{
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) 
    {
        bulkCopy.DestinationTableName = "dbo." + dt.TableName + "_neu";

        try
        {
            bulkCopy.WriteToServer(dt);
        }
        catch (Exception ex)
        {
            throw new FaultException("\n" + dt.TableName + ": " + ex.Message);
        }
    }
}

Il fonctionne très bien. Mais lorsque j'insère DataTime.MinValue dans ma base de données, j'obtiens cette erreur : SqlDateTime overflow. Doit être compris entre 1/1/1753 12:00:00 AM et 12/31/9999 11:59:59 PM. Existe-t-il un moyen de dire dans le foreach quelque chose comme ceci : si la valeur du champ DateTime de l'ensemble de données est DateTime.MinValue, ne pas insérer le champ DateTime de l'ensemble de données dans ma base de données ?

Meilleures salutations

1voto

AdaTheDev Points 53358

Je pense que vous devez vous assurer qu'il n'y a pas de DateTime.MinValue dans la table de données - contrôlez-vous la population de cette table ?

Dans ce cas, au lieu de stocker DateTime.MinValue dans un champ DateTime, utilisez SqlDateTime.MinValue au lieu de cela. Vous pouvez également stocker DBNull dans le tableau de données si vous souhaitez que NULL soit stocké dans la base de données.

0voto

RichardOD Points 19942

Si vous avez SQL Server 2008 et que cela ne vous dérange pas de stocker la valeur minimale, vous pouvez contourner le problème en utilisant DateTime2 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X