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 :

ORA-01830: données surnuméraires après la conversion correcte d'une chaîne en entrée [Fait]


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Points : 164
    Points
    164
    Par défaut ORA-01830: données surnuméraires après la conversion correcte d'une chaîne en entrée
    Bonsoir,


    Quelqu'un de charitable pourrait m'expliquer cette erreur.
    Et voir ce qui cloche dans mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       DateTime date1 = CalenSortie.Value;
                        DateTime heure1 = dtpHeureSortie.Value;
                        String vDateHeure1 = date1.ToShortDateString() + " " + heure1.ToShortTimeString();
                        //MessageBox.Show(vDateHeure1);
     
                        OleDbCommand cmdUpdateValSor = new OleDbCommand();
                        cmdUpdateValSor.Connection = cnx;
                        cmdUpdateValSor.CommandText = @" update interv set sortie = '" + vDateHeure1 + "' where nointerv = '" + txtNoInterv.Text + "'";
                        cmdUpdateValSor.ExecuteNonQuery();
                        cnx.Close();
    Merci

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    A mon avis c'est parce que le format de la chaîne représentant la date / heure n'est pas correct par rapport à ce qu'attend Oracle.

    Avec une requête paramétrée tu n'aurais pas ce genre de soucis.

    Par contre il me semble qu'il existe des classes pour Oracle (OracleConnection, OracleCommand, ...). Ce doit être sûrement plus adapté que OleDB

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Avec une requête paramétrée tu n'aurais pas ce genre de soucis.
    +1
    Ca t'évitera tous les problèmes liés au format de date ou de nombre, et pour les requêtes utilisées souvent ce sera plus performant
    Ce tuto explique comment utiliser des requêtes paramétrées :
    http://johannblais.developpez.com/tu...s-donnees/#LIV

    Citation Envoyé par StormimOn Voir le message
    Par contre il me semble qu'il existe des classes pour Oracle (OracleConnection, OracleCommand, ...). Ce doit être sûrement plus adapté que OleDB
    C'est clair
    Par contre il y a 2 providers :
    - celui qui est fourni avec le framework (System.Data.OracleClient) : il marche assez bien, mais je ne suis pas sûr qu'il soit compatible avec les toutes dernières versions d'Oracle (en tous cas c'est OK en 10g)
    - celui fourni par Oracle (Oracle.DataAccess.Client, ou ODP.NET) : probablement un peu plus efficace, et légèrement plus fonctionnel (gestion des BLOBs par exemple). Par contre attention, Oracle a pris quelques libertés dans son implémentation d'ADO.NET...

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Par contre attention, Oracle a pris quelques libertés dans son implémentation d'ADO.NET...
    Ah bon ? je suis justement en train de modifier du code qui faisait explicitement appel à toutes les classes d'ODP (OracleCommand, etc.) en remplaçant autant que possible les classes par leur interface ADO.Net correspondante pour rendre le code plus générique, avec pour objectif idéal de plus avoir qu'à changer le fichier de conf pour passer d'un provider à l'autre ; tu as eu des mauvaises expériences avec ODP ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Guulh Voir le message
    tu as eu des mauvaises expériences avec ODP ?
    Oui, mais j'arrive plus à retrouver de quoi il s'agissait exactement...

    Je sais qu'il y a en tous cas un problème avec les paramètres : ODP.NET ne les gère pas par nom mais uniquement par position. Autrement dit, si tu as un paramètre utilisé N fois dans une requête, il faut l'ajouter N fois dans les paramètres de la DbCommand, et dans le bon ordre s'il vous plait... sinon il te sort un joli "not all variables bound" ou quelque chose comme ça.

    D'ailleurs j'ai un code 100% générique, sans aucune référence explicite à System.Data.OracleClient ou Oracle.DataAccess.Client (juste le provider name dans le web.config), qui fonctionne nickel avec OracleClient mais qui fait l'erreur décrite ci-dessus avec ODP.NET

    Je crois que j'avais aussi remarqué autre chose, mais j'arrive pas à remettre la main dessus... j'avais dû en parler une fois dans une discussion sur le forum, je vais voir si je la retrouve

    EDIT : La discussion en question
    http://www.developpez.net/forums/d65...e-assigned-to/
    En plus ce jour là j'étais déjà assez énervé contre Oracle, donc mon post est un peu virulent... faut dire qu'ils ont fait fort sur ce coup là...
    Le coup de l'implémentation explicite avec le set qui ne fait rien, très fort

  6. #6
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    J'ai constaté ça, en effet. Je connais pas les autres provider, mais apparemment leur comportement correspond à celui d'ODP que si l'on spécifie OracleCommand.BindByName = true ; mais BindByName est propre à ODP et est absent d'ADO...

    A moins, systématiquement, de vérifier par réflexion si l'objet IDBCommand a une propriété BindByName et de la mettre à true si c'est le cas... Pas super propre

    Un peu de google me montre que d'autres y ont pensé : http://forums.oracle.com/forums/mess...sageID=2477024

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tiens, j'avais jamais vu cette propriété BindByName... (un peu normal d'ailleurs, vu que je ne manipulais que des DbCommand génériques...)
    Ce serait pas mal de pouvoir mettre ça dans un fichier de conf...

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Points : 164
    Points
    164
    Par défaut
    Merci à vous.
    Ouais, je l'ai résolu en repassant par une requête paramétrée.

    Et désolé pour le temps. J'avais complètement zappé.

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

Discussions similaires

  1. [SQL*Loader] ORA-01830 problème de date
    Par StreM dans le forum SQL
    Réponses: 7
    Dernier message: 24/08/2009, 16h45
  2. Réponses: 2
    Dernier message: 16/07/2009, 14h35
  3. Caractères spéciaux dans la base de données Mysql après sauvegarde.
    Par Alexandrebox dans le forum Administration
    Réponses: 11
    Dernier message: 15/02/2007, 06h32
  4. format de données incorrecte apres synchronisation
    Par mahboub dans le forum Access
    Réponses: 3
    Dernier message: 18/01/2007, 15h17
  5. ora-01830 avec donnee de type timestamp et interval
    Par JUSTIN Loïc dans le forum Oracle
    Réponses: 2
    Dernier message: 21/08/2006, 13h57

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