IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[Erreur]Expression evaluation caused an overflow


Sujet :

C#

  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [Erreur]Expression evaluation caused an overflow
    Bonjour.

    J'ai récemment fait un petit programme se connectant à des bases de donnée sql server compact.

    Le code marche plutôt bien sauf dans une fonction ou il fait une erreur vraiment étrange:
    Citation Envoyé par Exception Message
    Expression evaluation caused an overflow. [ Name of function (if known) = ]
    La pile d'appel étant la suivante:
    Citation Envoyé par Exception StackTrace
    at System.Data.SqlServerCe.SqlCeDataReader.ProcessResults(Int32 hr)
    at System.Data.SqlServerCe.SqlCeDataReader.IsEndOfRowset(Int32 hr)
    at System.Data.SqlServerCe.SqlCeDataReader.Move(DIRECTION direction)
    at System.Data.SqlServerCe.SqlCeDataReader.Read()
    at DataSyncApp.DataSync.UnsynchronizedRows(String strTblName, DateTime DtLasSyncTime, List`1 LstStrPrimaryColumns, SqlCeConnection& sqlConn, SqlCeCommand& sqlCmd) in C:\...\DataSync.cs:line 515
    La ligne concernée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    while (dtReaderOpen.Read())
    ou dtReader est de type SqlCeDataReader.

    Dans son contexte, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    private List<KeyValuePair<List<object>, DateTime>> UnsynchronizedRows
                (string strTblName,DateTime DtLasSyncTime,List<string> LstStrPrimaryColumns, 
                ref SqlCeConnection sqlConn, ref SqlCeCommand sqlCmd)
            {
     
                    string strSQLQuery = @"SELECT ";
                    //[...] (modification de strSQLQuery)
                    OpenConnection(ref sqlConn);
                    sqlCmd.CommandText = strSQLQuery;
                    SqlCeDataReader dtReaderOpen = sqlCmd.ExecuteReader(
                        System.Data.CommandBehavior.SequentialAccess);
                    List<KeyValuePair<List<object>, DateTime>> strDtPairListUnsyncRows =
                        new List<KeyValuePair<List<Object>, DateTime>>();
                    while (dtReaderOpen.Read())//plante là!
                    {
                        string dummy = "dummy StatementCompletedEventArgs";
                        dummy += dummy;
                        //[...]
                     }
                     CloseConnection(ref sqlConn);
                     return strDtPairListUnsyncRows;
            }
    Je ne vois absolument pas d'où vient l'erreur d'autant que j'ouvre des Read de la même manière pas mal de fois....

    Si vous avez une idée


    Merci d'avance

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    J'ai fais quelques test et recherches sur le net.

    Après avoir lu ce post, j'ai essayé de modifier les paramètres de sqlCmd.ExecuteReader() et fait pas mal de tests, mais sans succès.

    J'ai ensuite testé la commande SQL directement sur la base de donnée (via Microsoft SQL Server Managment Tool) et là grosse surprise: j'ai la même erreur!

    Avec la requete:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
      [Category ID], 
      [UpdateTime]  
    FROM 
      [Categories] 
    WHERE 
      DATEDIFF( second,'01/01/1753 00:00:00', [SyncTime])>0  
    ORDER BY 
      [Category ID] ASC

    On a la réponse suivante de la base:

    Citation Envoyé par Microsoft SQL Server Managment Tool on a SQL Server Compact Edition v3.5 Database
    Major Error 0x80004005, Minor Error 25901
    > SELECT [Category ID], [UpdateTime] FROM [Categories] WHERE DATEDIFF( second,'01/01/1753 00:00:00', [SyncTime])>0 ORDER BY [Category ID] ASC
    Expression evaluation caused an overflow. [ Name of function (if known) = ]
    Bref, il semble que mon problème soit plus un problème de SQL SERVER que de C#.

    Un modérateur pourrait-il déplacer la discussion ?


    Merci

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Tu utilises quelle version de Sql Server CE ?

  4. #4
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Tu utilises quelle version de Sql Server CE ?
    Citation Envoyé par méphistopheles Voir le message
    Envoyé par:Microsoft SQL Server Managment Tool on a SQL Server Compact Edition v3.5 Database

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Ok.

    Essaye avec la SP2 à tout hasard, si tu as le même problème (elle corrige pas mal de merdes).

    Accessoirement, tu as le problème sur une version desktop ou embarquée ?

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Bonjour.

    J'ai finalement trouvé d'où venait l'erreur: Datediff renvoie un int(32) (qui va de 2^-31+1 à 2^31 or 2^31) ce qui a en seconde une différence maximale de 68,3 ans or [SyncTime] était en 2010

    La solution était donc de comparer la date "par morceaux"... le problème est que je n'ai pas trouvé de moyen de découper la date en morceaux (en gros, date du jour et horaire dans la journée).

    La seule solution que j'ai trouvé est de convertir en float, mais ça me convient moyennement car la précision du float n'est pas uniforme...

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
      [Category ID], 
      [UpdateTime]
    FROM 
      [Categories] 
    WHERE 
      cast(cast('01/01/1753 00:00:00'as datetime) as float)< cast([SyncTime] as float) 
    ORDER BY 
      [Category ID] ASC

    Si quelqu'un a une meilleure idée


    Merci d'avance.

    Note: je met néanmoins cette discussion en résolu, le temps de créer un nouveau sujet en section SQL.

  7. #7
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    queestion bête, pourquoi un datediff pour comparer deux dates?


    tu as essayé?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE '01/01/1753 00:00:00' < [SyncTime]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ERREUR][EXPRESSIONS REGULIERES] multiligne
    Par floanne dans le forum Langage
    Réponses: 1
    Dernier message: 31/07/2007, 11h55
  2. Réponses: 6
    Dernier message: 09/06/2006, 00h19
  3. Erreur pango a cause du package GTK 2.9.8
    Par titor dans le forum GTK+
    Réponses: 5
    Dernier message: 07/01/2006, 19h58
  4. [MFC] erreur bizar a cause d'un activeX
    Par pitch21 dans le forum MFC
    Réponses: 12
    Dernier message: 29/06/2005, 14h36
  5. [langage] erreur expressions régulières
    Par perlaud dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo