Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    octobre 2012
    Messages
    152
    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 : 152
    Points : 128
    Points
    128

    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é

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

    Informations forums :
    Inscription : septembre 2007
    Messages : 578
    Points : 750
    Points
    750

    Par défaut

    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

  3. #3
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    octobre 2012
    Messages
    152
    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 : 152
    Points : 128
    Points
    128

    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 Confirmé Sénior Avatar de Pol63
    Homme Profil pro Sébastien
    Développeur .NET / DBA SQL SERVER
    Inscrit en
    avril 2007
    Messages
    11 163
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : avril 2007
    Messages : 11 163
    Points : 17 106
    Points
    17 106

    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 :
    param.value = date.parseexact("le string contenant la date","MM/dd/yyyy",Nothing)

  5. #5
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    octobre 2012
    Messages
    152
    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 : 152
    Points : 128
    Points
    128

    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 Confirmé Sénior Avatar de Pol63
    Homme Profil pro Sébastien
    Développeur .NET / DBA SQL SERVER
    Inscrit en
    avril 2007
    Messages
    11 163
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien
    Âge : 32
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : avril 2007
    Messages : 11 163
    Points : 17 106
    Points
    17 106

    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

  7. #7
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    octobre 2012
    Messages
    152
    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 : 152
    Points : 128
    Points
    128

    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •