Précédent   Forum du club des développeurs et IT Pro > Dotnet > Langages > VB.NET
VB.NET Forum d'entraide sur la programmation Visual Basic .NET. Avant de poster -> FAQ VB.NET, Articles VB.NET, Sources VB.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 03/01/2013, 13h05   #1
Jah73
Membre à l'essai
 
Homme
Etudiant
Inscription : octobre 2012
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Etudiant
Secteur : Service public

Informations forums :
Inscription : octobre 2012
Messages : 52
Points : 24
Points : 24
Par défaut Problème requête ADO.NET

Bonjour à tous,

Avant de commencer, je vous souhaite à tous mes meilleurs voeux pour cette nouvelle année !


J'ai un petit problème avec ADO.NET. J'ai un programme qui récupère des valeurs dans un fichier texte et qui doit les envoyer dans une BDD Sql Server.

Voici mon code :

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
Dim connection As SqlConnection = New SqlConnection(connectString)
 
            If connection.State = ConnectionState.Open Then
 
                Dim command As SqlCommand = New SqlCommand("INSERT INTO T_E_EXPOSURE_EXP (EXP_ID, EXP_BATCH_TYPE, EXP_DATE, EXP_JOB_NAME, EXP_LAYER_ID, EXP_COMBINED_MARK_IMAGE_EXPOSURE) VALUES (1, @batch_type, @date, @jobname, @layer_id, @mark)", connection)
 
                With command.Parameters
                    .Add(New SqlParameter("@batch_type", SqlDbType.VarChar))
                    .Add(New SqlParameter("@date", SqlDbType.DateTime))
                    .Add(New SqlParameter("@jobname", SqlDbType.VarChar))
                    .Add(New SqlParameter("@layer_id", SqlDbType.VarChar))
                    .Add(New SqlParameter("@mark", SqlDbType.VarChar))
                End With
 
                With command
                    .Parameters("@batch_type").Value = batchType
                    .Parameters("@date").Value = Convert.ToDateTime(dateReport)
                    .Parameters("@jobname").Value = jobName
                    .Parameters("@layer_id").Value = layerID
                    .Parameters("@mark").Value = combinedMarkImageExposure
                End With
 
                MessageBox.Show(command.CommandText.ToString())
 
                'Execution
                connection.Open()
 
                command.ExecuteNonQuery()
 
                connection.Close()
            Else
                MsgBox("Server connection failure ", MsgBoxStyle.OkOnly, "Status")
            End If
Mes variables batchType, dateReport etc continent les bonnes valeurs sauf que dans la BDD je me retrouve avec des @batch_type. C'est à dire que ça ne remplace pas les variables précédées d'un "@"

Quelqu'un à une idée ?

Merci,

Jah

PS : Pour l'ID c'est normal, j'ai enlevé l'auto-incrémentation, aucun souci de ce côté
Jah73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 16h40   #2
dkmix
Membre éprouvé
 
Avatar de dkmix
 
Inscription : septembre 2007
Messages : 373
Détails du profil
Informations personnelles :
Localisation : Jamaïque

Informations forums :
Inscription : septembre 2007
Messages : 373
Points : 467
Points : 467
Bonjour

Essayez ceci :
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
 
Dim connection As SqlConnection = New SqlConnection(connectString)
 
            If connection.State = ConnectionState.Open Then
 
                Dim command As SqlCommand = New SqlCommand("INSERT INTO T_E_EXPOSURE_EXP (EXP_ID, EXP_BATCH_TYPE, EXP_DATE, EXP_JOB_NAME, EXP_LAYER_ID, EXP_COMBINED_MARK_IMAGE_EXPOSURE) VALUES (1, @batch_type, @date, @jobname, @layer_id, @mark)", connection)
 
                With command.Parameters
                    .Add(New SqlParameter("batch_type",batchType))
                    .Add(New SqlParameter("date", Convert.ToDateTime(dateReport)))
                    .Add(New SqlParameter("jobname", jobName))
                    .Add(New SqlParameter("layer_id", layerID))
                    .Add(New SqlParameter("mark", combinedMarkImageExposure))
                End With
 
                MessageBox.Show(command.CommandText.ToString())
 
                'Execution
                connection.Open()
 
                command.ExecuteNonQuery()
 
                connection.Close()
            Else
                MsgBox("Server connection failure ", MsgBoxStyle.OkOnly, "Status")
            End If
dkmix est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 03/01/2013, 17h09   #3
Jah73
Membre à l'essai
 
Homme
Etudiant
Inscription : octobre 2012
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Etudiant
Secteur : Service public

Informations forums :
Inscription : octobre 2012
Messages : 52
Points : 24
Points : 24
Merci pour ta réponse dkmix

En fait, le problème vient de la date. Celle que j'extraie est au format 'MM/DD/YYYY'. Comment pallier à ce problème pour envoyer une date au format 'DD/MM/YYYY' ?
Jah73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 17h15   #4
Pol63
Expert Confirmé Sénior
 
Avatar de Pol63
 
Homme Sébastien
Développeur .NET / DBA SQL SERVER
Inscription : avril 2007
Messages : 10 224
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur .NET / DBA SQL SERVER
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 10 224
Points : 17 080
Points : 17 080
Envoyer un message via Skype™ à Pol63
une date c'est une date, ce n'est pas un string
via un parameter de type date, ce n'est pas un string qui transite mais bien une date, soit un codage ISO sur 8 octets
par contre vu que tu as un string en entrée il faut le convertir en date :
Code :
param.value = date.parseexact("le string contenant la date","MM/dd/yyyy",Nothing)
Pol63 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/01/2013, 17h25   #5
Jah73
Membre à l'essai
 
Homme
Etudiant
Inscription : octobre 2012
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Etudiant
Secteur : Service public

Informations forums :
Inscription : octobre 2012
Messages : 52
Points : 24
Points : 24
Bonsoir Pol63,

Merci pour ta réponse, j'ai deux questions :

1) .Parameters("@date").Value = Convert.ToDateTime(dateReport) ne convertie pas un string en une date ?

2) Avec ta méthode param.value = date.parseexact("le string contenant la date","MM/dd/yyyy",Nothing), je reste avec une date au format "MM/DD/YYYY" ?

Merci pour l'aide
Jah73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 17h45   #6
Pol63
Expert Confirmé Sénior
 
Avatar de Pol63
 
Homme Sébastien
Développeur .NET / DBA SQL SERVER
Inscription : avril 2007
Messages : 10 224
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur .NET / DBA SQL SERVER
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 10 224
Points : 17 080
Points : 17 080
Envoyer un message via Skype™ à Pol63
1
convert.todatetime convertit un string en date, mais il se base sur le paramétrage régional de windows, et sur un windows francais c'est dd/mm/yyyy
donc il va t'inverser le jour et le mois

2
parseexact permet de spécifier le format du string et dire où sont jours mois et autres
il y a un codage, dd permet de dire jour sur 2 chiffres, d permet de dire jour sur 1 chiffre ou 2 si supérieur à 9, M MM MMM MMMM c'est mois (MMM c'est pour avoir le nom du mois abrégé, MMMM nom complet), il y a aussi h hh H HH m mm (minutes)
le / veut dire caractère séparateur (défini dans windows)
etc...
voir msdn (format) pour avoir le détail

en debug visual studio affiche les variables dates en mm/dd/yyyy (c'est là que tu as vu la valeur ou dans la base ?)
quand à sql server ca dépend du paramétrage de l'utilisateur, qui permet de spécifier comment afficher une date en string
et je le répète car c'est le point important vb ou sql server ne stockent pas le string de la date, mais la date sous forme binaire standard et donc indépendant de l'os ou autre
Pol63 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2013, 10h35   #7
Jah73
Membre à l'essai
 
Homme
Etudiant
Inscription : octobre 2012
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Etudiant
Secteur : Service public

Informations forums :
Inscription : octobre 2012
Messages : 52
Points : 24
Points : 24
Merci pour tes explications Pol63

J'aurai dû aller voir le msdn avant de te poser la question

Voilà le code qui fonctionne :

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
Dim connection As SqlConnection = New SqlConnection(connectString)
 
            connection.Open()
 
            If connection.State = ConnectionState.Open Then
 
                Dim command As SqlCommand = New SqlCommand("INSERT INTO T_E_EXPOSURE_EXP (EXP_ID, EXP_BATCH_TYPE, EXP_DATE, EXP_JOB_NAME, EXP_LAYER_ID, EXP_COMBINED_MARK_IMAGE_EXPOSURE) VALUES (7, @batch_type, @date, @jobname, @layer_id, @mark)", connection)
 
                With command.Parameters
                    .Add(New SqlParameter("@batch_type", SqlDbType.VarChar))
                    .Add(New SqlParameter("@date", SqlDbType.DateTime))
                    .Add(New SqlParameter("@jobname", SqlDbType.VarChar))
                    .Add(New SqlParameter("@layer_id", SqlDbType.VarChar))
                    .Add(New SqlParameter("@mark", SqlDbType.VarChar))
                End With
 
                With command
                    .Parameters("@batch_type").Value = batchType
                    .Parameters("@date").Value = Date.ParseExact(dateReport, "MM/dd/yyyy", Nothing)
                    .Parameters("@jobname").Value = jobName
                    .Parameters("@layer_id").Value = layerID
                    .Parameters("@mark").Value = combinedMarkImageExposure
                End With
 
                'Execution
 
                command.ExecuteNonQuery()
 
                connection.Close()
            Else
                MsgBox("Server connection failure ", MsgBoxStyle.OkOnly, "Status")
            End If

Merci !
Jah73 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 19h48.


 
 
 
 
Partenaires

Hébergement Web