2009-09-29 4 views
2

Dans mon code, j'ai plusieurs objets ajoutés au référentiel, j'ai essayé d'exécuter la fonction de sauvegarde() Save() une fois à la fin de toutes les boucles, et en l'appelant après chaque objet ajouté. Mais de toute façon, je reçois toujours un débordement SqlDateTime lorsque le db.SubmitChanges() dans le référentiel .Save() ... une idée?Qu'est-ce qui provoquerait un débordement SqlDateTime lors de l'utilisation de LINQ to SQL SubmitChanges()?

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. 

Source Error: 

Line 155:  public void Save() 
Line 156:  { 
Line 157:   db.SubmitChanges(); 
Line 158:  } 
Line 159: 


Source File: C:\inetpub\wwwroot\Models\OrderRepository.cs Line: 157 


     foreach (string vol in volumes) 
     { 
      if (vol != "-1" && vol != "") 
      { 
       Product prod = orderRepository.getProductByVolumeID(System.Convert.ToInt32(vol)); 
       ProductVolume pvol = orderRepository.getProductVolumeByID(System.Convert.ToInt32(vol)); 

       OrderProduct oProd = new OrderProduct(); 
       oProd.OrderID = getOrder.OrderID; 
       oProd.VolumeID = pvol.VolumeID; 
       orderRepository.AddOrderProduct(oProd); 


      } 
     } 

     foreach (string feat in features) 
     { 
      if (feat != "") 
      { 
       Product prod = orderRepository.getProductByID(System.Convert.ToInt32(feat)); 

       OrderFeature oFeat = new OrderFeature(); 
       oFeat.OrderID = getOrder.OrderID; 
       oFeat.ProductID = prod.ProductID; 
       orderRepository.AddOrderFeature(oFeat); 


       featuresTotal += prod.UserIntervalPrice; 
      } 

     } 

     totalTotal = volumeTotal + featuresTotal; 
     orderRepository.Save(); 

Répondre

4

Fondamentalement, le problème est que le type de données Sql DATETIME commence à 01/01/1753, wheras DateTime.MinValue est 1/1/0000 (ou quelque chose comme ça). Donc, si vous n'initialisez pas les propriétés de date, vous obtenez des débordements Sql.

Options pour fixer:

a) Initialisez le DateTime somewheres.

b) Basculez sql pour utiliser le type de données DATETIME2 qui couvre toute la plage de valeurs .NET DateTime. [SQL 2008 uniquement]

+0

b est seulement bon pour SQL Server 2008 – RichardOD

+0

ah oui, j'avais totalement oublié que j'avais même un champ DateTime dans ma table, cette réponse a rafraîchi ma mémoire et expliqué pourquoi, merci – BigOmega

+0

réponse fixe pour tenir compte du commentaire de RichardOD –