Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > ADO.NET
ADO.NET Forum d'entraide sur le développement avec les services d'accès aux données disponibles avec ADO.NET.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/10/2012, 12h04   #1
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 555
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 555
Points : 144
Points : 144
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
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 12h53   #2
Nathanael Marchand
Rédacteur/Modérateur

 
Avatar de Nathanael Marchand
 
Homme Nathanael Marchand
Expert .Net So@t
Inscription : octobre 2008
Messages : 3 520
Détails du profil
Informations personnelles :
Nom : Homme Nathanael Marchand
Âge : 26
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : octobre 2008
Messages : 3 520
Points : 7 961
Points : 7 961
Il est préfèrable d'executer une requête parametrée.
Tu trouveras plusieurs tutoriaux dans la section .Net
Nathanael Marchand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 13h07   #3
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 555
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 555
Points : 144
Points : 144
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
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 13h15   #4
Nathanael Marchand
Rédacteur/Modérateur

 
Avatar de Nathanael Marchand
 
Homme Nathanael Marchand
Expert .Net So@t
Inscription : octobre 2008
Messages : 3 520
Détails du profil
Informations personnelles :
Nom : Homme Nathanael Marchand
Âge : 26
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : octobre 2008
Messages : 3 520
Points : 7 961
Points : 7 961
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.
Nathanael Marchand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 13h29   #5
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 555
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 555
Points : 144
Points : 144
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.
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 16h07   #6
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 555
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 555
Points : 144
Points : 144
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
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 16h12   #7
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 555
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 555
Points : 144
Points : 144
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
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2012, 10h45   #8
jacko842
Membre habitué
 
Inscription : juin 2006
Messages : 555
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 555
Points : 144
Points : 144
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
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h03.


 
 
 
 
Partenaires

Hébergement Web