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 :

[C#] Insertion de deux lignes identiques dans la BDD au lieu d'une.


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club

    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 32
    Points : 36
    Points
    36
    Par défaut [C#] Insertion de deux lignes identiques dans la BDD au lieu d'une.
    Bonsoir,

    Je suis actuellement en train de m'essayer à l'ASP.net, avec le langage C#.
    Je me suis attelé à l'utilisation des bases de données, seulement j'ai quelques soucis.

    Tout d'abord une petite description du fonctionnement de ma page :

    On rempli un formulaire, lors de la validation, les champs sont envoyé par l'url à la même page, qui va les ajouté à la BDD.
    Ensuite, le contenu de la base de donnée s'affiche.

    Hors là, lors de la validation, UNE ligne est insérée (pas de problème donc), et si je rempli le formulaire et que je valide de nouveau, la MEME ligne est insérée, en plus d'une autre ligne contenant les variables du nouveau formulaire.

    Voilà le 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
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <%@ Page Title="Page d'accueil" Language="C#" AutoEventWireup="true"%>
     <script runat="server">
     
         protected void Page_Load(object sender, EventArgs e)
         {
     
             Application["id"] = getCount();
             //--- Mise en base de donnée
     
     
             if (Request.Params["n"] != null)
             {
                 Application["id"] = Convert.ToInt32(Application["id"]) + 1;
     
     
                 ajoutBDD(Convert.ToInt32(Application["id"]), Request.Params["n"].ToString(), Request.Params["v"].ToString(), Convert.ToInt32(Request.Params["cp"].ToString()), Request.Params["a"].ToString(), Request.Params["mail"].ToString(), Convert.ToInt32(Request.Params["s"].ToString()), Request.Params["tel"].ToString(), Request.Params["im"].ToString());
             }
     
             //--- Affichage de la base de donnée
             La.Text += "<br/>";
             La.Text += "<br/> Contenu de la base de donnée";
             La.Text += "<br/> ----------------------------<br/>";
             for (int i = 0; i < Convert.ToInt32(Application["id"]); i++)
             {
     
                 affBDD(i);
                 La.Text += "<br/>"; 
             }        
             La.Text += "<br/> ----------------------------<br/>";
     
     
         }
         protected int getCount()
         {
             // renvoi le nombre de ligne dans la BDD	       
         }
     
         protected void affBDD(int id)
         {
     
          	//Affiche le contenu de la base de donnée      
     
         } 
     
         protected void ajoutBDD(int id, string nom, string ville, int codePostal, string annonce, string email, int surface, string tel, string images)
         {
             try
             {
                 // Chaine de connexion
                 string connectString = "XXX; XXX; XXX; XXX";
     
                 // Objet connection
                 System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectString);
     
                 // Ouverture
                 connection.Open();
     
                 // Objet Command
                 System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand
    				("INSERT INTO immob (\"id\",\"nom\",\"ville\",\"code_postal\" ,\"annonce\" ,\"email\" ,\"surface\" ,\"telephone\" ,\"images\") 
    				values (\'"+id+"\',\'"+nom+"\',\'"+ville+"\',\'"+codePostal+"\',\'"+annonce+"\',\'"+email+"\',\'"+surface+"\',\'"+tel+"',\'"+images+"\')",connection);
     
                 // Execution
                 int affectedrows = command.ExecuteNonQuery();
                 La.Text += "Nombre de lignes affectées" + affectedrows;
     
                 // Fermeture connection
                 connection.Close();
     
             }
             catch (Exception ex)
             {
                 La.Text += ex.ToString();
     
             }
         }
     
         public void Check(object sender, EventArgs e) // lors de la validation du formulaire
         {
     
             Response.Redirect("Default.aspx?n=" + tbNom.Text + "&cp=" + tbCodePostal.Text+"&v=" + tbVille.Text+"&a=" + tbAnnonce.Text+"&s=" + tbSurface.Text+"&mail=" + tbMail.Text+"&im=" + tbImages.Text+ "&tel="+tbTel.Text);
         }
        </script>
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <html>
            <head>
     
            </head>
            <body>
                <form id="Form1" runat="server">
                    Nom, Prénom :
                    <asp:TextBox id="tbNom" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    Ville :
                    <asp:TextBox id="tbVille" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    Code postal :
                    <asp:TextBox id="tbCodePostal" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    Texte de l'annonce :
                    <asp:TextBox id="tbAnnonce" Height = "200" Width="200" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    Adresse email :
                    <asp:TextBox id="tbMail" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    Surface :
                    <asp:TextBox id="tbSurface" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    Téléphone : 
                    <asp:TextBox id="tbTel" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    Images :
                    <asp:TextBox id="tbImages" Runat="server"></asp:TextBox>
                    <br />
                    <br />
                    <asp:Button id="Submit" onclick="Check" Runat="server" Text="Valider"></asp:Button>
                    <br />
                    <br />
                    <br />
                    <asp:Label ID="La" runat = "server"></asp:Label>
                </form>
            </body>
        </html>
    Si vous aviez une petite idée, ça m'aiderai :°

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    J'avoue ne pas savoir répondre exactement à ta question mais j'en ai une pour toi : pourquoi ne pas faire l'ajoutBD dans ton check plutôt que de reposter la page ?

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Bonjour,

    quelques remarques sur ton code :
    - voila un superbe exemple de requête in-maintenable et non sécurisée... (ainsi codée, ton application sera sensible à l'injection sql)
    --> Utilise les requêtes paramétrées
    - si tu parviens à insérer deux enregistrements identiques dans ta table, c'est que celle-ci ne contient pas de clé primaire permettant d'assurer l'unicité des données
    --> Si c'est la cas, revoie ta modélisation.

    Enfin, concernant ton problème initial, silberfab a raison, quel est l'intérêt de rediriger vers la page pour procéder à l'insertion ? Et pourquoi ne pas la faire dans ton event Check ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Et dans quel état se retrouve ta connexion si ta requête plante ?

    Je te le donne dans le mille

  5. #5
    Nouveau membre du Club

    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 32
    Points : 36
    Points
    36
    Par défaut
    Alors en fait, l'intérêt de rediriger vers la page pour procéder à l'insertion est inexistant. C'était juste pour tester l'envoi de donné par url, et comme ça marchais, j'ai laissé tel quel quand j'ai voulu m'essayer à la BDD.
    Je vais le faire de cette façon, qui est largement préférable je vous l'accorde

    Et pour la question de la modélisation, la clé primaire est l'ID, et il est incrémenté de 1 à chaque insertion. Les deux lignes sont identiques, à part leurs ID, j'ai oublié de le préciser je ne sais pas pourquoi

    Merci pour vos réponses, je vais changer de méthode et je reviendrai donner des nouvelles.
    Bonne journée.

Discussions similaires

  1. [Free Pascal] Détecter les lignes identiques dans deux tableaux de texte
    Par jeanmich dans le forum Free Pascal
    Réponses: 11
    Dernier message: 10/01/2009, 15h43
  2. Supprimer lignes identiques dans un fichier
    Par Gad29 dans le forum Langage
    Réponses: 19
    Dernier message: 30/05/2007, 15h09
  3. [SQL 2005] Insertion de deux données identiques dans une table
    Par skystef dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/01/2007, 22h50
  4. [sql server][c#] problème d'insertion avec deux données identiques
    Par skystef dans le forum Accès aux données
    Réponses: 2
    Dernier message: 22/12/2006, 16h28
  5. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57

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