Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre habitué
    Inscrit en
    juin 2006
    Messages
    576
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 576
    Points : 146
    Points
    146

    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 :
    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 :
    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/Modérateur

    Avatar de Nathanael Marchand
    Homme Profil pro Nathanael Marchand
    Expert .Net So@t
    Inscrit en
    octobre 2008
    Messages
    3 607
    Détails du profil
    Informations personnelles :
    Nom : Homme Nathanael Marchand
    Âge : 27
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : octobre 2008
    Messages : 3 607
    Points : 8 173
    Points
    8 173

    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 habitué
    Inscrit en
    juin 2006
    Messages
    576
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 576
    Points : 146
    Points
    146

    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/Modérateur

    Avatar de Nathanael Marchand
    Homme Profil pro Nathanael Marchand
    Expert .Net So@t
    Inscrit en
    octobre 2008
    Messages
    3 607
    Détails du profil
    Informations personnelles :
    Nom : Homme Nathanael Marchand
    Âge : 27
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : octobre 2008
    Messages : 3 607
    Points : 8 173
    Points
    8 173

    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 habitué
    Inscrit en
    juin 2006
    Messages
    576
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 576
    Points : 146
    Points
    146

    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 habitué
    Inscrit en
    juin 2006
    Messages
    576
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 576
    Points : 146
    Points
    146

    Par défaut

    J'ai essayé avec une requête paramétrée

    Code :
    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 habitué
    Inscrit en
    juin 2006
    Messages
    576
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 576
    Points : 146
    Points
    146

    Par défaut

    J'ai retiré les []

    Code :
    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 habitué
    Inscrit en
    juin 2006
    Messages
    576
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 576
    Points : 146
    Points
    146

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •