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

cs_neotof Messages postés 75 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 3 décembre 2012 - 19 oct. 2012 à 22:41
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 21 oct. 2012 à 03:57
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

cs_neotof Messages postés 75 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 3 décembre 2012
20 oct. 2012 à 10:46
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.
0
cs_neotof Messages postés 75 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 3 décembre 2012
20 oct. 2012 à 10:48
Le problème est toujours sur la ligne myCommand.ExecuteNonQuery()
0
cs_neotof Messages postés 75 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 3 décembre 2012
20 oct. 2012 à 12:59
J'ai trouvé
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 oct. 2012 à 03:57
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)
0
Rejoignez-nous