Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 16h33   #1
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 19
Points : 8
Points : 8
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 :
User AddUser = new User(textBoxPseudo.Text, textBoxPassword1.Text);
Et voici le code de ma classe :
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
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 :
"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?
bobbely est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 16h57   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
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 ?
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 17h10   #3
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 19
Points : 8
Points : 8
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.
bobbely est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 08h58   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Citation:
Code :
"INSERT INTO [User] (Pseudo, Password) VALUES ('monPseudo','monPassword')"
Pourquoi avoir mis le nom de la table entre crochets ?

Code :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/12/2011, 11h18   #5
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 19
Points : 8
Points : 8
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.
bobbely est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 11h44   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2011, 17h47   #7
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 352
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 352
Points : 9 742
Points : 9 742
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
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 18h04   #8
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 !
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 18h14   #9
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 352
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 352
Points : 9 742
Points : 9 742
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
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h55.


 
 
 
 
Partenaires

Hébergement Web