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 ORA-01841 seulement avec un paramètre


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut Erreur ORA-01841 seulement avec un paramètre
    Bonjour,

    je souhaite exécuter une requête prenant en paramètre une date.
    Ma requête est construite ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __query.Append("   AND sel.sel_date BETWEEN TO_DATE('?','YYYYMMDD') AND ...
    Le paramètre est passé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OleDbParameter[] paramList = new OleDbParameter[1];
    paramList[0] = new OleDbParameter("@DDeb", ddeb.ToString("yyyyMMdd"));
    ddeb étant une variable DateTime.

    Si j'exécute ma requête ainsi, j'obtiens une erreur :
    ORA-01841: (full) year must be between -4713 and +9999", and not be 0
    En revanche, si je passe la valeur "en dur" dans le code, je n'ai aucun souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __query.Append("   AND sel.sel_date BETWEEN TO_DATE('20080601','YYYYMMDD') AND ...
    En passant le paramètre ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OleDbParameter[] paramList = new OleDbParameter[1];
    paramList[0] = new OleDbParameter("@DDeb", "20080601");
    l'erreur persiste.

    Donc visiblement, le souci vient du paramètre... mais je suis incapable de voir d'où peut venir le problème. Quelqu'un aurait une idée ?

    Merci d'avance !

    Alban
    « Se demander si un ordinateur peut penser est aussi intéressant que de se demander si un sous-marin peut nager. »
    -- Edsger Dijkstra

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par alband85 Voir le message
    Bonjour,

    je souhaite exécuter une requête prenant en paramètre une date.
    Ma requête est construite ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __query.Append("   AND sel.sel_date BETWEEN TO_DATE('?','YYYYMMDD') AND ...
    Pourquoi tu mets un ?, il faut mettre @DDeb.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    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 Skyounet Voir le message
    Pourquoi tu mets un ?, il faut mettre @DDeb.
    Yep, et tu peux aussi t'abstenir de passer par des chaînes de caractère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    __query.Append("   AND sel.sel_date BETWEEN @DDeb AND ... "
     
    paramList[0] = new OleDbParameter("@DDeb", ddeb);
    ಠ_ಠ

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Ben... les "?", ça fonctionne aussi... Il suffit de donner les paramètres dans l'ordre.
    Mais je ne savais pas qu'on pouvait utiliser les identifiants. C'est quand même plus clair... et plus souple !

    Entre temps, j'avais effectivement passé la date directement, sans passer par un TO_DATE... et ça a fonctionné (en retirant les single quotes). Comme quoi, le typage, c'est pas seulmement fait pour faire joli !

    Merci pour vos réponses à tous les deux !
    « Se demander si un ordinateur peut penser est aussi intéressant que de se demander si un sous-marin peut nager. »
    -- Edsger Dijkstra

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 06/03/2008, 16h32
  2. Erreur avec le paramètre binding
    Par verbose dans le forum JSF
    Réponses: 11
    Dernier message: 24/07/2007, 09h36
  3. probleme avec erreur ORA-01536
    Par ka0z dans le forum Oracle
    Réponses: 7
    Dernier message: 12/03/2007, 16h34
  4. Erreur ORA-12514 avec database link
    Par gafreu dans le forum Administration
    Réponses: 20
    Dernier message: 09/09/2004, 11h53
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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