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

ADO.NET Discussion :

ORA-01843 NOT A VALID MONTH avec mon insert [Débutant]


Sujet :

ADO.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut ORA-01843 NOT A VALID MONTH avec mon insert
    Bonjour,

    J'ai un application vb.net qui tente de faire des insert dans un DB oracle.

    Quand j’exécute cette requête directement sur la DB abec Toad ça fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO tbl_candidature(id_candidat,id_fonction_vacante,id_statut,date_encodage,lien_cv,lien_lettre,lien_doc,candi_ext_int,soutien_politique,candidature_spontanee,commentaire,reserve,date_debut_reserve,date_fin_reserve,experience,date_mail,word,lien_word) values (1934,29,4,'19/10/2012','','','',0,0,0,'',0,'','','','01/01/1999',0,'')
    Mais si j’exécute la même requête sur a partir de mon applicatif j'ai un message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    str_requete = "INSERT INTO tbl_candidature(id_candidat,id_fonction_vacante,id_statut,date_encodage,lien_cv,lien_lettre,lien_doc,candi_ext_int,soutien_politique,candidature_spontanee,commentaire,reserve,date_debut_reserve,date_fin_reserve,experience,date_mail,word,lien_word) values (1934,29,4,'12/10/09','','','',0,0,0,'',0,'','','','12/10/09',0,'')"
     
    db.FONC_REQ_DTS_MYSQL(str_requete)
    Message d'erreur:
    ORA-01843 NOT A VALID MONTH

    J'ai regardé dans NLS_DATE_FORMAT je suis au format DD/MM/RR

    Je suis bloqué depuis hier sur ça ...

    D'avance merci

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Il est préfèrable d'executer une requête parametrée.
    Tu trouveras plusieurs tutoriaux dans la section .Net

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Merci de ton aide mais j'aurais voulu trouver une solution a mon problème et par après passer aux requêtes paramétrées

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par jacko842 Voir le message
    Merci de ton aide mais j'aurais voulu trouver une solution a mon problème et par après passer aux requêtes paramétrées
    Bah ton problème vient du fait que ton TOAD est configuré avec une certaine culture qui défini la date en dd/mm/yyy et que ton connecteur de donnée la défini en mm/dd/yyyy.
    Mais mettre les valeurs comme ca dans une requête c'est une très mauvaise pratique pour plusieurs raisons:
    -c'est la porte ouverte aux injections
    -c'est la foire aux problèmes de culture (comme le tiens ou encore celui des décimaux avec . ou ,)
    -tu empêches l'analyseur Oracle de réutiliser les plans et d'ainsi optimiser les performances

    Donc, orientes toi tout de suite vers les requêtes parametrées (pas les procédures stockées hein) et pas vers des bidouilles à base de convert, de replace ou autres folklorités.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Ici j'ai mis mes valeurs directement dans la requête pour tester et voir d'ou viens le problème.

    Et je ne comprends toujours pas pourquoi ma requête ne passe pas car

    12/10/09 peut être une date dd/mm/yy ou mm/dd/yy.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    J'ai essayé avec une requête paramétrée

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
            Dim oradb As String = "Data Source=(DESCRIPTION=" _
               + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=******)(PORT=1521)))" _
               + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DBTEST)));" _
               + "User Id=***;Password=****;"
     
            Dim conn As New OracleConnection(oradb)
            'conn.Open()
     
            Dim myCommand As OracleCommand
            Dim strRequete As String
     
     
            strRequete = "INSERT INTO [GRH.TBL_CANDIDATURE] ( [id_candidat],[id_fonction_vacante],[id_statut],[date_encodage],[lien_cv],[lien_lettre],[lien_doc],[candi_ext_int],[soutien_politique],[candidature_spontanee],[commentaire],[reserve],[date_debut_reserve],[date_fin_reserve],[experience],[date_mail],[word],[lien_word]) VALUES (@id_candidat,@id_fonction_vacante,@id_statut,@date_encodage,@lien_cv,@lien_lettre,@lien_doc,@candi_ext_int,@soutien_politique,@candidature_spontanee,@commentaire,@reserve,@date_debut_reserve,@date_fin_reserve,@experience,@date_mail,@word,@lien_word)"
            'str_requete = "INSERT INTO tbl_candidature(id_candidat,id_fonction_vacante,id_statut,date_encodage,lien_cv,lien_lettre,lien_doc,candi_ext_int,soutien_politique,candidature_spontanee,commentaire,reserve,date_debut_reserve,date_fin_reserve,experience,date_mail,word,lien_word) values (1970,29,4,TO_DATE(" & "'12/09/12'" & "'YYYYMMDD')" & ",'','','',0,0,0,'',0,'','','','',0,'')"
     
            myCommand = New OracleCommand(strRequete, conn)
     
            'Création et décalartion des paramètres
            With myCommand.Parameters
                .Add(New OracleParameter("@id_candidat", OracleDbType.Int32, 4))
                .Add(New OracleParameter("@id_fonction_vacante", OracleDbType.Int32, 4))
                .Add(New OracleParameter("@id_statut", OracleDbType.Int32, 4))
                .Add(New OracleParameter("@date_encodage", OracleDbType.Date))
                .Add(New OracleParameter("@lien_cv", OracleDbType.Char, 255))
                .Add(New OracleParameter("@lien_lettre", OracleDbType.Char, 255))
                .Add(New OracleParameter("@lien_doc", OracleDbType.Char, 255))
                .Add(New OracleParameter("@candi_ext_int", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@soutien_politique", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@candidature_spontanee", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@commentaire", OracleDbType.Char, 255))
                .Add(New OracleParameter("@reserve", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@date_debut_reserve", OracleDbType.Date))
                .Add(New OracleParameter("@date_fin_reserve", OracleDbType.Date))
                .Add(New OracleParameter("@experience", OracleDbType.Char, 255))
                .Add(New OracleParameter("@date_mail", OracleDbType.Date))
                .Add(New OracleParameter("@word", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@lien_word", OracleDbType.Char, 255))
            End With
     
            'Attribution des valeurs aux paramètres
            With myCommand
                .Parameters("@id_candidat").Value = CInt("1970")
                .Parameters("@id_fonction_vacante").Value = CInt("29")
                .Parameters("@id_statut").Value = CInt(4)
                .Parameters("@date_encodage").Value = CDate("12/09/2012")
                .Parameters("@lien_cv").Value = CStr("")
                .Parameters("@lien_doc").Value = CStr("")
                .Parameters("@lien_lettre").Value = CStr("")
                .Parameters("@candi_ext_int").Value = CInt(0)
                .Parameters("@soutien_politique").Value = CInt(0)
                .Parameters("@candidature_spontanee").Value = CInt(0)
                .Parameters("@commentaire").Value = CStr("")
                .Parameters("@reserve").Value = CInt(0)
                .Parameters("@date_debut_reserve").Value = CDate("12/09/2012")
                .Parameters("@date_fin_reserve").Value = CDate("12/09/2012")
                .Parameters("@experience").Value = CStr("")
                .Parameters("@date_mail").Value = CDate("12/09/2012")
                .Parameters("@word").Value = CStr("")
                .Parameters("@lien_word").Value = CStr("")
     
            End With
     
            myCommand.Connection.Open()
            myCommand.ExecuteNonQuery()
            myCommand.Connection.Close()
    Mais il bloque sur la ligne myCommand.ExecuteNonQuery() ==> invalid table name pourtant ma table se nomme TBL_CANDIDATURE

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    J'ai retiré les []

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
     Dim conn As New OracleConnection(oradb)
            'conn.Open()
     
            Dim myCommand As OracleCommand
            Dim strRequete As String
     
     
            strRequete = "INSERT INTO TBL_CANDIDATURE (id_candidat,id_fonction_vacante,id_statut,date_encodage,lien_cv,lien_lettre,lien_doc,candi_ext_int,soutien_politique,candidature_spontanee,commentaire,reserve,date_debut_reserve,date_fin_reserve,experience,date_mail,word,lien_word) VALUES (@id_candidat,@id_fonction_vacante,@id_statut,@date_encodage,@lien_cv,@lien_lettre,@lien_doc,@candi_ext_int,@soutien_politique,@candidature_spontanee,@commentaire,@reserve,@date_debut_reserve,@date_fin_reserve,@experience,@date_mail,@word,@lien_word)"
     
     
            myCommand = New OracleCommand(strRequete, conn)
     
            'Création et décalartion des paramètres
            With myCommand.Parameters
                .Add(New OracleParameter("@id_candidat", OracleDbType.Int32, 4))
                .Add(New OracleParameter("@id_fonction_vacante", OracleDbType.Int32, 4))
                .Add(New OracleParameter("@id_statut", OracleDbType.Int32, 4))
                .Add(New OracleParameter("@date_encodage", OracleDbType.Date))
                .Add(New OracleParameter("@lien_cv", OracleDbType.Char, 255))
                .Add(New OracleParameter("@lien_lettre", OracleDbType.Char, 255))
                .Add(New OracleParameter("@lien_doc", OracleDbType.Char, 255))
                .Add(New OracleParameter("@candi_ext_int", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@soutien_politique", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@candidature_spontanee", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@commentaire", OracleDbType.Char, 255))
                .Add(New OracleParameter("@reserve", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@date_debut_reserve", OracleDbType.Date))
                .Add(New OracleParameter("@date_fin_reserve", OracleDbType.Date))
                .Add(New OracleParameter("@experience", OracleDbType.Char, 255))
                .Add(New OracleParameter("@date_mail", OracleDbType.Date))
                .Add(New OracleParameter("@word", OracleDbType.Int16, 1))
                .Add(New OracleParameter("@lien_word", OracleDbType.Char, 255))
            End With
     
            'Attribution des valeurs aux paramètres
            With myCommand
                .Parameters("@id_candidat").Value = CInt("1970")
                .Parameters("@id_fonction_vacante").Value = CInt("29")
                .Parameters("@id_statut").Value = CInt(4)
                .Parameters("@date_encodage").Value = CDate("12/09/2012")
                .Parameters("@lien_cv").Value = CStr("")
                .Parameters("@lien_doc").Value = CStr("")
                .Parameters("@lien_lettre").Value = CStr("")
                .Parameters("@candi_ext_int").Value = CInt(0)
                .Parameters("@soutien_politique").Value = CInt(0)
                .Parameters("@candidature_spontanee").Value = CInt(0)
                .Parameters("@commentaire").Value = CStr("")
                .Parameters("@reserve").Value = CInt(0)
                .Parameters("@date_debut_reserve").Value = CDate("12/09/2012")
                .Parameters("@date_fin_reserve").Value = CDate("12/09/2012")
                .Parameters("@experience").Value = CStr("")
                .Parameters("@date_mail").Value = CDate("12/09/2012")
                .Parameters("@word").Value = CStr("")
                .Parameters("@lien_word").Value = CStr("")
     
            End With
     
            myCommand.Connection.Open()
            myCommand.ExecuteNonQuery()
            myCommand.Connection.Close()
    J'ai une erreur ORA-00936: missing expression

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    J'ai remplacé les @ par des : car Oracle utilise : au lieu de @ (SQL Server).

    Maintenant il me dit le format de la chaîne d'entrée est incorrect, erreur sur la ligne myCommand.ExecuteNonQuery()

    OK c'est bon j'ai trouvé merci

+ 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. [11g] Erreur : Not a valid month error (ORA-1843)
    Par jérémyp8 dans le forum Oracle
    Réponses: 4
    Dernier message: 28/11/2013, 17h32
  3. [11gR2] select error ora-01843 not a valid month
    Par jacko842 dans le forum Débuter
    Réponses: 1
    Dernier message: 08/04/2013, 13h49
  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