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 :

OracleException not a valid month


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 37
    Points
    37
    Par défaut OracleException not a valid month
    Bonjour
    j'utilise un DateTimePicker pour recuper une date et je veut recuper des information avec cette date dans une base Oracl :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public List<Int32> getNumerosEntetes(DateTime date, string idBanque)
            {
                List<Int32> numero = new List<int>();
                string dateText = date.ToString("dd/MM/yyyy");
                using (DbConnection Cnx = ConnexionFactory.Instance.getConnexion())
                {
                    using (DbCommand Cmd = Cnx.CreateCommand())
                    {
                        Cmd.CommandText = "select  numero_entete,code_banque_source from clr_fichier where date_traitement='" + dateText + "' and code_banque_source='" + idBanque + "'  ";
                        DbDataReader reader = Cmd.ExecuteReader();
                       if (reader.HasRows==false)
                        {
                            numero = null;
                        }
                        else
                        {
                            while (reader.Read())
                            {
     
                                numero.Add(Int32.Parse(reader["numero_entete"].ToString()));
     
                            }
     
                        }
                    }
     
                }
     
                return numero;
     
            }
    Ici c'est la valeur du DateTimePicker qui est passée en paramètre mais je me retrouve avec cette exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    System.Data.OracleClient.OracleException (0x80131938): ORA-01843: not a valid month
     
       à System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
       à System.Data.OracleClient.OracleDataReader.ReadInternal()
       à System.Data.OracleClient.OracleDataReader.Read()
    et pourtant ma requête ressemble a ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select  numero_entete,code_banque_source from clr_fichier where date_traitement='14/09/2012' and code_banque_source='56'
    quand je débogue.
    Please Help!!!

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 025
    Points : 5 462
    Points
    5 462
    Par défaut
    Utilise une requete paramétré c'est toujours mieux.
    Peut etre que c'est un problème de culture, toi tu rentres du FR, lui attend de EN...

  3. #3
    Nouveau membre du Club
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par micka132 Voir le message
    Utilise une requete paramétré c'est toujours mieux.
    Peut etre que c'est un problème de culture, toi tu rentres du FR, lui attend de EN...
    Ban merci pour ton post mais suis vraiment un débutant et nul comment on écrit une requête paramétrée?

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  numero_entete, code_banque_source 
    from clr_fichier 
    where date_traitement= '17/09/2012' 
    and code_banque_source= '150';
    Cette requête marcherait en supposant que le format de data par défaut de votre session soit 'DD/MM/YYYY' ce qui n'est pas toujours le cas. Pour se prémunir des erreurs de conversions implicites des dates (comme ici apparement, Oracle fait al convertion implicite de votre chaîne de caractère en Date mais les formats ne correspondent pas), le mieux reste de faire la converstion explicitement avec la fonction Oracle TO_DATE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  numero_entete, code_banque_source 
    from clr_fichier 
    where date_traitement= TO_DATE('17/09/2012' , 'DD/MM/YYYY')
    and code_banque_source= '150';
    Bonne journée.
    Cordialement,

  5. #5
    Nouveau membre du Club
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Juda_ Voir le message
    Bonjour,
    le mieux reste de faire la converstion explicitement avec la fonction Oracle TO_DATE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  numero_entete, code_banque_source 
    from clr_fichier 
    where date_traitement= TO_DATE('17/09/2012' , 'DD/MM/YYYY')
    and code_banque_source= '150';
    Bonne journée.
    Cordialement,
    Merci pour le post mais si je veux dynamiser cette requête ?

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Points : 110
    Points
    110
    Par défaut
    Je ne connais pas bien le C#, mis à part votre requête je pars du principe que le reste n'est pas à changer. Donc en gardant votre code il n'y a juste à modifier la construction de la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Cmd.CommandText = "select  numero_entete,code_banque_source 
    from clr_fichier 
    where date_traitement=TO_DATE('" + dateText + "', 'DD/MM/YYYY' )
    and code_banque_source='" + idBanque + "'  ";

  7. #7
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Comme l'a dit micka132, la seule solution viable est les requêtes paramétrées. toutes les autres sont que bricologe.

    Voici un exemple
    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
     
                    IDbCommand command = connection.CreateCommand();
                    command.CommandText = "select numero_entete,code_banque_source from clr_fichier where date_traitement = @date and code_banque_source = @idBanque";
     
                    // Premier paramètre
                    IDbDataParameter dateParameter = command.CreateParameter();
                    dateParameter.ParameterName = "@date";
                    dateParameter.Value = new DateTime(2012, 1, 1);
                    command.Parameters.Add(dateParameter);
     
                    // Deuxième paramètre
                    IDbDataParameter idBanqueParameter = command.CreateParameter();
                    idBanque.ParameterName = "@idBanque";
                    idBanque.Value = 1;
                    command.Parameters.Add(idBanque);
     
                    // Exécute la commande
                    command.ExecuteReader();

  8. #8
    Nouveau membre du Club
    Informaticien
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations professionnelles :
    Activité : Informaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 37
    Points
    37
    Par défaut
    Merci a tous !!!

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

Discussions similaires

  1. ORA-01843: not a valid month
    Par jplec dans le forum PL/SQL
    Réponses: 13
    Dernier message: 23/06/2017, 13h19
  2. [Débutant] ORA-01843 NOT A VALID MONTH avec mon insert
    Par jacko842 dans le forum ADO.NET
    Réponses: 7
    Dernier message: 20/10/2012, 10h45
  3. Erreur Oracle not a valid month
    Par SQL_i dans le forum Oracle
    Réponses: 4
    Dernier message: 14/10/2011, 14h25
  4. Réponses: 6
    Dernier message: 10/06/2011, 13h57
  5. Not a valid month ? ?
    Par szdavid dans le forum Oracle
    Réponses: 22
    Dernier message: 16/01/2006, 16h55

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