IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème requête ADO.NET [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    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 : 154
    Points : 167
    Points
    167
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour

    Essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    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 : 154
    Points : 167
    Points
    167
    Par défaut
    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' ?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    param.value = date.parseexact("le string contenant la date","MM/dd/yyyy",Nothing)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    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 : 154
    Points : 167
    Points
    167
    Par défaut
    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

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    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
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    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 : 154
    Points : 167
    Points
    167
    Par défaut
    Merci pour tes explications Pol63

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

    Voilà le code qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème dataAdapter ADO.NET et service windows
    Par NameX dans le forum VB.NET
    Réponses: 3
    Dernier message: 04/05/2010, 10h13
  2. [ADO.Net][VB.Net] Comment faire requête dynamique Access ?
    Par Zinneke dans le forum Accès aux données
    Réponses: 2
    Dernier message: 12/02/2006, 18h09
  3. [ADO.Net][C#/Mysql] Comment exécuter une requête paramétrée?
    Par wremacle dans le forum Accès aux données
    Réponses: 6
    Dernier message: 07/02/2006, 16h55
  4. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50
  5. [VB.NET] [ADO.NET] Requête paramétrée
    Par DotNET74 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 11/03/2005, 08h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo