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 :

Class C# avec requéte SQL qui fonctionne pas


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Points : 161
    Points
    161
    Par défaut Class C# avec requéte SQL qui fonctionne pas
    Bonjour,
    Je débute tout juste en programmation orientée objet et j'essaie de faire une class qui me permettra à chaque instanciation de faire une requête d'insertion dans ma base de données.
    J'ai bien vérifié si la requête passai directement dans l'interface de gestion de la base de donnée et c'est le cas.
    Je ne comprend pas pourquoi ça ne fonctionne pas, merci de m'éclairer.

    Voici l'instanciation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        protected void Button1_Click(object sender, EventArgs e)
        {
            string id = logiciel.SelectedValue;
            int access = 1;
            string titre = TextBoxTitre.Text;
            string comment = TextBoxComment.Text;
            DateTime date = DateTime.Now;
            string requete = "INSERT INTO [articles] ([id_produits_], [id_acces_], [id_titre_traduction_], [id_commentaire_traduction_], [titre], [commentaire], [type_fiche], [type_telechargement], [type_notice], [type_video], [type_faq], [date_publication], [date_maj]) VALUES (1, "+access+", NULL, NULL, '"+titre+"', '"+comment+"', 1, 0, 0, 0, 0, '"+date+"', NULL)";
            InsertionArticle InsertFiche = new InsertionArticle(requete);
        }
    Voici ma class :
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Configuration;
    using System.Data.SqlClient;
    using System.Windows.Forms;
     
    /// <summary>
    /// Description résumée de InsertionArticle
    /// </summary>
    public class InsertionArticle
    {   
        private string _StrConnexion;
        private string _requete;
     
    	public InsertionArticle(string requete)
    	{
            this._requete = requete;
            string _StrConnexion = ConfigurationManager.ConnectionStrings["supportConnectionString"].ConnectionString; 
    	}
     
         public void Insert()
         {
             SqlConnection cx = new SqlConnection(this._StrConnexion);
             try
             {
                 cx.Open();
                 SqlCommand cmd = new SqlCommand(this._requete, cx);
                 cmd.ExecuteNonQuery();
                 cx.Close();
                 Console.WriteLine("OK");
             }
             catch (Exception err)
             {
                 Console.WriteLine(err.Message);
             }
             finally
             {
                 cx.Close();
             }
         }
     
        public void Main() 
        {
            Insert();
        }
     
    }
    Merci d'avance pour votre aide.

  2. #2
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    Bonjour,

    si tu n'appelles pas InsertFiche.Insert() ta requête ne sera pas exécutée

  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Et quel est le message d'erreur?

  4. #4
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Je n'ai justement aucun message d'erreur.
    La méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void Main(){...}
    si je l'ai bien compris, s'exécute automatiquement à l'intanciation de la class.
    Pourquoi devrai-je appeler InsertArticle.Insert() alors la méthode Main est censée se charger de cela. non?
    Je vais essayer d'enlever la méthode Main et d'appeler directement Insert()

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Ta méthode Main n'est pas appelée.
    Tu confonds le constructeur d'une classe avec le Main d'un programme console par ex

  6. #6
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    J'ai alors fait quelques modifications

    Mon instanciation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        protected void Button1_Click(object sender, EventArgs e)
        {
            string id = logiciel.SelectedValue;
            int access = 1;
            string titre = TextBoxTitre.Text;
            string comment = TextBoxComment.Text;
            DateTime date = DateTime.Now;
            string requete = "INSERT INTO [articles] ([id_produits_], [id_acces_], [id_titre_traduction_], [id_commentaire_traduction_], [titre], [commentaire], [type_fiche], [type_telechargement], [type_notice], [type_video], [type_faq], [date_publication], [date_maj]) VALUES (1, "+access+", NULL, NULL, '"+titre+"', '"+comment+"', 1, 0, 0, 0, 0, '"+date+"', NULL)";
            InsertionArticle InsertFiche = new InsertionArticle(requete);
            InsertFiche.Insert();
        }
    et ma class
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Configuration;
    using System.Data.SqlClient;
    using System.Windows.Forms;
     
    /// <summary>
    /// Description résumée de InsertionArticle
    /// </summary>
    public class InsertionArticle
    {   
        private string _StrConnexion;
        private string _requete;
     
    	public InsertionArticle(string requete)
    	{
            this._requete = requete;
            string _StrConnexion = ConfigurationManager.ConnectionStrings["supportConnectionString"].ConnectionString; 
    	}
     
         public void Insert()
         {
             SqlConnection cx = new SqlConnection(this._StrConnexion);
             try
             {
                 cx.Open();
                 SqlCommand cmd = new SqlCommand(this._requete, cx);
                 cmd.ExecuteNonQuery();
                 cx.Close();
                 Console.WriteLine("OK");
             }
             catch (Exception err)
             {
                 Console.WriteLine(err.Message);
             }
             finally
             {
                 cx.Close();
             }
         }
     
    }
    Mais malheuresement cela ne fonctionne toujours pas.

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    Plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private string _StrConnexion;
    private string _requete;
     
    public InsertionArticle(string requete)
    {
    	this._requete = requete;
    	this._StrConnexion = ConfigurationManager.ConnectionStrings["supportConnectionString"].ConnectionString; 
    }
    Si tu fais de l'ASP il ne faut pas utiliser "Console.WriteLine":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine(err.Message);
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Write(err.Message);
    A+

  8. #8
    Membre actif Avatar de AJemni
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2008
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2008
    Messages : 242
    Points : 290
    Points
    290
    Par défaut
    Salut,
    peut être que le pb provient de ta requête.
    a tu vérifie la compatibilité entre les types de données?
    donne nous le script de création de la table articles

  9. #9
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Le problème est résolu, merci à tous et particulièrement à toi Immobilis pour ton oeil de lynx. Erreur bette de ma part, c'était un this._StrConnexion et non pas un string _StrConnexion qu'il fallait mettre. Ce qui est logique car private string _StrConnexion restait à null. Les requêtes se font bien mais pas de message dans la console? J'utilise Firebug.
    Merci encore à tous.

  10. #10
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    mais pas de message dans la console
    NOrmal, comme je te l'ai dit tu es en web la console n'est pas disponible. Je me demande pourquoi ça compile d'ailleurs.

    A+

  11. #11
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    J'avais bien remplacé les Console.WriteLine() par Console.Write() comme tu me l'avais conseillé (j'ai oublié de le préciser). Toujours pas de message dans la console de Firebug mais bon c'est pas très important quoique ça m'intrigue quand même.
    Je précise aussi que je développe sous .net Framework 3.5 SP1.

  12. #12
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    RRaaahhh
    Citation Envoyé par Immobilis Voir le message
    Si tu fais de l'ASP il ne faut pas utiliser "Console.WriteLine":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine(err.Message);
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Write(err.Message);
    A+



  13. #13
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Désolé et merci encore Immobilis.
    Response.Write() ne passe pas dans une class (erreur de compilation).

    Seul Consol.Write() ou Console.WriteLine() avec lesquels ça compile => équivalent je pense à Console.log() en JavaScript (Je me trompe peut être).
    De toute façon c'est pas grave, le principal est que les requêtes passent, je trouverai bien un moyen de retourner un message.

    A+

  14. #14
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par nasimpat7 Voir le message
    Response.Write() ne passe pas dans une class (erreur de compilation).
    Il faut importer la référence system.web.

    Après c'est pas forcement logique de faire un response.write ou console.write en dehors d'une interface homme machine. Parce que ainsi, tu couple fortement ta clase avec l'IHM. Dans ce cas tu ne pourras pas l'utiliser en dehors de cette IHM. Il faut éventuellement utiliser la trace ou bien que la méthode renvoit une chaine ou bien passer une variable par référence ou encore utiliser une propriété assignée au cours du processus.

    A+

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

Discussions similaires

  1. [AJAX] Requête SQL ne fonctionne pas AJAX
    Par FrancisKu dans le forum AJAX
    Réponses: 0
    Dernier message: 26/06/2013, 16h09
  2. Requête SQL qui fonctionne de manière aléatoire
    Par weberick dans le forum Bases de données
    Réponses: 13
    Dernier message: 18/11/2011, 12h00
  3. Réponses: 4
    Dernier message: 02/02/2009, 17h01
  4. [MySQL] Ma requête SQL ne fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/01/2007, 12h41

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