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

ASP.NET Discussion :

Problème Insertion d'une date dans une base de donnée [Débutant]


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Problème Insertion d'une date dans une base de donnée
    Bonjour,
    je suis nouveau sur le développement .NET avec le langage C#, c'est sur une page de test où j'essaie de récupérer une date à partir d'un Calendar, où j'ai utilisé un formattage pour avoir une date sous la forme "dd/MM/yyyy", voilà mon problème commence là lorsque j'essaie d'insérer cette date dans un champ "date" de type "date" dans une base de donnée je reçois le message suivant: "Conversion failed when converting date and/or time from character string"

    Voici le code utilisé:
    1. page: mapage.aspx

      page mapage.aspx

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      <asp:TextBox ID="txtStartDate" runat="server"></asp:TextBox>
                      <asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server" 
                          ErrorMessage="*Requis." ForeColor="Red" Font-Bold="true"
                          ControlToValidate="txtStartDateAudit" /><br />
                  <asp:CalendarExtender ID="CalendarExtender1" TargetControlID="txtStartDateAudit" runat="server" 
                      Format="dd/MM/yyyy"/>
    2. page: mapage.aspx.cs
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
       
                  SqlConnection con = new SqlConnection(connStr);
                  con.Open();
                  com = new SqlCommand("INSERT INTO tab(date) values ('" + txtStartDate.Text + "')", con);
                  com.ExecuteNonQuery();
                  con.Close();


    Le message est:
    Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.Data.SqlClient.SqlException: Conversion failed when converting date and/or time from character string.
    Je vous remercie par avance pour vos retours.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faut utiliser les requêtes paramétrées. Grâce à elles, plus besoin de se soucier du format des données sous forme de string, ton application est mieux protégée contre les attaques par injection SQL, et le plan d'exécution de la requête est stabilisé, entre autres bénéfices.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour DotNetMatt,
    Merci pour ton retour, toutefois comme je l'ai mentionné je découvre le langage et je souhaite comprendre toutes les subtilités avant d'utiliser les mécanismes de haut niveau.
    C'est pour celà que je souhaite comprendre pourquoi ce code ne fonctionne pas.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Sur ce coup là, il n'y a aucune question à se poser, c'est juste LA seule façon d'utiliser correctement les requêtes SQL Faire de la concaténation de valeurs comme tu le fais dans ton premier post est une très mauvaise pratique.

    Comme je l'ai déjà mentionné dans mon précédent post : "plus besoin de se soucier du format des données sous forme de string". Cela signifie que lorsque tu concatènes la valeur de txtStartDate.Text dans ta requête SQL, tu utilises une date sous forme de string. Le problème c'est que si le client a son UI en Anglais, la date sera en format Anglais. Si le client a son UI en Français, la date sera en format Français. Or admettons que tu as installé ton serveur SQL en langue Anglaise, alors le seul format qui sera accepté sera le format Anglais.

    Le fait d'utiliser une requête paramétrée t'évite ces problématiques de format : en C# un objet date est un objet date, quel que soit le format intrinsèque (Français, Anglais...) tu manipules une date. D'ailleurs dans ton cas il faudra dès le début convertir la valeur en date :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var startDate = Convert.ToDateTime(txtStartDate.Text);
    Puis l'utiliser avec les paramètres.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    c'est noté, Va pour les requêtes paramétrèes.
    Je te remercie pour ton explication claire et concise.

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

Discussions similaires

  1. insérer une date dans une table dans un format compréhensible
    Par laurentSc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/08/2014, 16h31
  2. [MySQL] Enregistrer une date dans la base de données
    Par tkhchkhiche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/09/2009, 07h18
  3. [MySQL] Problème avec les accent lors d'une recherche dans ma base de donnée
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/06/2009, 14h08
  4. Probleme d'ajout d'une date dans un base de donnée access(conversion)
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 20/01/2008, 12h27
  5. Inserer une date d'une table dans une autre table
    Par petitetre dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/04/2007, 20h16

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