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

Langage SQL Discussion :

Requête SQL qui ne modifie pas la DB


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Requête SQL qui ne modifie pas la DB
    Salut à tous,

    Je suis en train de développé une application WinForm en C# qui agit avec une base de donnée SQL Server CE. Celle-ci possède 3 tables, et j'ai un soucis avec avec une requête SQL qui n'effectue pas la demande alors que le compilateur (Visual C# 2010 Express) ne me signale aucune erreur. La table en question se nomme "User" et présente les colonnes "ID" (en auto-incrémentation et de valeur initiale 1), "Pseudo" et "Password".

    Voici le code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User AddUser = new User(textBoxPseudo.Text, textBoxPassword1.Text);
    Et voici le code de ma classe :
    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
    public class User
        {
            public int ID;
            public string Pseudo;
            public string Password;
     
            public User(string pseudo, string password)
            {
                Pseudo = pseudo;
                Password = password;
                InsertUser();
            }
     
            private void InsertUser()
            {
                string strReq = "INSERT INTO [User] (Pseudo, Password) VALUES ('" + Pseudo + "','" + Password + "')";
     
                SqlCeConnection oConnection = new SqlCeConnection("Data Source=|DataDirectory|\\MyDatabase#1.sdf");
                SqlCeCommand Command = new SqlCeCommand(strReq, oConnection);
                oConnection.Open();
                Command.ExecuteNonQuery();
     
                oConnection.Close();
            }
        }

    J'ai essayé en mode debug et j'arrive bien à une strReq style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO [User] (Pseudo, Password) VALUES ('monPseudo','monPassword')"
    J'ai essayé d'envoyer la même requête via la commande "Nouvelle requête" proposée dans le compilateur et cela a bien ajouté une ligne à ma table ... Pouvez-vous m'aider à trouver la solution à mon problème?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Ceci n'est donc pas un problème SQL mais bien un problème C#

    Demandez à ce que l'on déplace votre poste ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Je ne crois pas que ce soit un problème en C# car le code ne rencontre pas de soucis, j'ai fait exactement la même procédure avec un autre objet (s'intégrant dans une autre table de la base) et je n'ai pas eu de soucis. De plus, le projet ne devrait pas compiler si c'était un soucis en C#, j'avais hésité à poser la question dans le forum C# mais j'en ai déduit que cela concernait plutôt le SQL.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO [User] (Pseudo, Password) VALUES ('monPseudo','monPassword')"
    Pourquoi avoir mis le nom de la table entre crochets ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Command.ExecuteNonQuery();
    Je ne connais pas C# mais ceci me laisse à penser que le programme s'attend à autre chose qu'une requête écrite en SQL natif ; un truc du genre saloperie de pseudo SQL inutilement compliqué des ORM.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Finalement c'était un problème avec ma base de donnée, j'ai trouvé la solution en changeant ma ConnectionString en dur pour être sûr de manipuler la bonne DB.

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Pourquoi avoir mis le nom de la table entre crochets ?
    User est un mot clé...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Je ne connais pas C# mais ceci me laisse à penser que le programme s'attend à autre chose qu'une requête écrite en SQL natif ; un truc du genre saloperie de pseudo SQL inutilement compliqué des ORM.
    Non, et ce code ne fait pas appel à un ORM, mais attaque une base SSCE directement via ADO.NET.
    Et ExecuteNonQuery est la bonne méthode d'exécution de requête dès lors qu'il ne s'agit pas d'un 'SELECT'.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    J'aurai dit que la bonne méthode pour ce besoin est l'exécution d'une procédure stockée.

    C'est le niveau 0 de la protection contre le SQL Injection !

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Waldar Voir le message
    C'est le niveau 0 de la protection contre le SQL Injection !
    Pour une requête d'insertion simple tel que celle présentée, l'utilisation des requêtes paramètrées protège très bien contre l'injection SQL (ce qui n'est pas fait ici, au demeurant).

    De plus, la base utilisée ici est SSCE, base "in-process" (l'objet de connexion utilisé est sans ambigüité) qui ne supporte pas les PS.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/07/2011, 11h54
  2. Réponses: 1
    Dernier message: 10/08/2010, 14h26
  3. requête SQL qui ne marche pas en tant que vue (view)
    Par charlesz dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/08/2008, 14h25
  4. Interbase requête SQL qui ne fonctionne pas
    Par colorid dans le forum InterBase
    Réponses: 6
    Dernier message: 20/11/2007, 17h36

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