Problème avec ma requête(insert) sur une DB oracle

Signaler
Messages postés
75
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
3 décembre 2012
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour,

J'utilise le driver oracle pour un applicatif en VB.net.

J'ai un problème avec ma requête insert, quand je l’exécute avec Toad ma requête fonctionne mais pas depuis Visual Studio.

Requête sous toad:

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,'')



Requête avec visual studio:

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,'')"


Message d'erreur:

Ora-01843 not a valid month j'ai déja essayé d'encoder la date de différentes façon mais rien ne passe.

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

Je pense que TOAD est configuré avec une certaine culture qui défini la date en dd/mm/yy et que mon connecteur de donnée est défini autrement.

On ma conseillé de passer par une requête paramétrée:
Dim oradb As String = "Data Source=(DESCRIPTION=" _
           + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=******)(PORT=1521)))" _
           + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DBTEST)));" _
           + "User Id=GRH;Password=grh;"

        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)"

        MsgBox(strRequete)
        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_lettre").Value = CStr("")
            .Parameters("@lien_doc").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

        Try
            myCommand.Connection.Open()
            myCommand.ExecuteNonQuery()
            myCommand.Connection.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try



Mais j'ai une erreur sur la ligne

myCommand.ExecuteNonQuery()

missing expression.

Pouvez vous m'aider, d'avance merci

4 réponses

Messages postés
75
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
3 décembre 2012

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 mais je sais pas de quelle ligne de code il s'agit.
Messages postés
75
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
3 décembre 2012

Le problème est toujours sur la ligne myCommand.ExecuteNonQuery()
Messages postés
75
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
3 décembre 2012

J'ai trouvé
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
Salut

Trouvé ... et ça venait de quoi ?
Même si tu as auto-résolu ton problème, pense aux autres qui pourraient avoir le même problème et qui aimeraient trouver ta solution.
Merci pour eux.

Sinon, si Oracle réagit comme SQL Server, je pensais à imposer la culture lors de la connexion : Regarde voir si dans ton objet connexion tu peux ajouter ce paramètre :
' Impose Anglais au cas où on serait sur une machine locale FR
maConn.Properties("Locale Identifier").Value = 1033
(syntaxe utilisée sur ADODB sous VB6)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)