Bonjour à tous,
Je dois présenter un projet en C# pour ma seconde session et je me retrouve avec un petit soucis.
Le contexte:
Réalisation d'un jeu, ici une bataille terrestre, réalisée entre autre en C# / C++ pour l'IA. La base de données est en SQL CE et nous devons utiliser du LinQ to SQL.
La base de données:
3 tables: le joueur, la partie et la participation. Pour l'instant ce qui nous intéresse est la table Joueur qui est composé d'un Pseudo, d'un password, de l'argent en poche, et du nombre de canon que l'utilisateur possède.
explication du problème:
J'ai testé trois possibilités:
1°) Ajout d'un nouvel utilisateur, d'aprés les différents messages la connexion est fonctionnelle, et en effet je lance l'ajout de l'utilisateur et je vais pour me connecter par la suite aucun problème il me connecte et me met pas de messages d'erreurs (alors que si l'utilisateur est inexistant il me met un message d'erreur et une fois co je peux aller dans les statistiques ou j'ai les infos corrects)
2°) Ajouter a la main dans la base de données un utilisateur et tenter de me connecter avec. La encore la connexion ne passe sans problèmes et les infos sorties dans le profil sont les bonnes. Donc niveau lecture aucun problème.
3°) Suppression du compte via l'interface créée, la encore il me note que le compte est supprimé et quand je veux me reco avec il fait comme s'il n'existait plus. Mais si je regarde dans la base de données après avoir fermé le projet le compte est toujours existant.
Pour les points 1 et 3 donc si je relance le programme c'est comme si je n'avais rien fait le compte ajouté n'existe plus et le compte supprimé est toujours présent. Un peu comme s'il écrivait via une base de données temporaire qui était basée sur l'existante mais qui est supprimée à la fin de chaque test du projet.
Niveau code:
Inscription.cs:
DataAccess.cs
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Linq; namespace Prototype2Screens { /// <summary> /// Logique d'interaction pour Inscription.xaml /// </summary> public partial class Inscription : UserControl { private String erreur; public Inscription() { this.InitializeComponent(); } //Annulation de l'inscription private void BtnRetourPgConnexion_Click(object sender, RoutedEventArgs e) { //Test pour voir si l'on a rien entré avant NavigationWindow.GetWindow(this).Content = (new Connexion()); } //Inscription d'un nouvel user private void btnValiderInscription_Click(object sender, RoutedEventArgs e) { if (this.verifChamps()) { Joueur joueur = new Joueur(); joueur.Pseudo = txtBoxPseudo.Text; joueur.Password = pwdBoxPwd.Password.ToString(); joueur.NbCanon = 1; joueur.ArgentEnPoche = 1000; try { (new DataAccess()).ajouterJoueur(joueur); DataManager.setJoueur(joueur); NavigationWindow.GetWindow(this).Content = (new Connexion()); } catch (Exception ex) { MessageBox.Show(ex.Message, "Alerte"); } } else { MessageBox.Show("Joueur déjà existant", "Erreur Inscription", MessageBoxButton.OK, MessageBoxImage.Error); } } //Vérifie si les champs sont correctement complétés public Boolean verifChamps() { Boolean isOK = true; erreur = "Veuillez corriger la(les) erreur(s) suivante(s) : "; if (String.IsNullOrEmpty(this.txtBoxPseudo.Text.ToString()) == true)//Le pseudo est vide { erreur += "\n - Le champ du pseudo ne peut être vide"; isOK = false; } if (String.IsNullOrEmpty(this.pwdBoxPwd.Password.ToString()) == true )//Mot de passe vide { erreur += "\n - Le champ du mot de passe ne peut être vide"; isOK = false; } if (String.IsNullOrEmpty(this.pwdBoxConfirmPwd.Password.ToString()) == true)//Mot de passe de confirmation est vide { erreur += "\n - Le champ de confirmation du mot de passe ne peut être vide"; isOK = false; } if (this.pwdBoxPwd.Password.ToString().CompareTo(this.pwdBoxConfirmPwd.Password.ToString()) != 0)//les mots de passe sont différents { erreur += "\n - Les deux mots de passe ne peuvent être différent"; isOK = false; } if (!isOK)//On affiche une popup avec les messages d'erreurs { MessageBox.Show(erreur, "Erreur", MessageBoxButton.OK, MessageBoxImage.Error); } return isOK; } } }
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; namespace Prototype2Screens { class DataAccess { private DBJEUCsharpDataContext db; public DataAccess() { try { //open DB connexion string conString = "Data Source=|DataDirectory|\\DBJEUCsharp.sdf"; db = new DBJEUCsharpDataContext(conString); System.Console.WriteLine("Connexion OK"); } catch (Exception e) { Console.WriteLine(e.Message); } } // ajoute un joueur dans la DB public void ajouterJoueur(Joueur joueur) { try { db.Joueur.InsertOnSubmit(joueur); db.SubmitChanges(); } catch (Exception e) { MessageBox.Show(e.Message, "Alerte"); } } // récuperer le joueur dans la DB public Joueur getJoueur(Joueur j) { List<Joueur> joueurs = new List<Joueur>(); try { var result = from p in db.Joueur where p.Pseudo == j.Pseudo && p.Password == j.Password select p; joueurs.AddRange(result); } catch (Exception e) { Console.WriteLine(e.Message); } foreach (Joueur joueur in joueurs) { j.Pseudo = joueur.Pseudo; j.Password = joueur.Password; j.NbCanon = joueur.NbCanon; j.ArgentEnPoche = joueur.ArgentEnPoche; } return j; } //Verifier l'existance du joueur public Boolean checkJoueur(String pseudo) { Boolean b; List<Joueur> joueurs = new List<Joueur>(); try { var result = from j in db.Joueur where j.Pseudo == pseudo select j; joueurs.AddRange(result); } catch (Exception e) { Console.WriteLine(e.Message); } int i = 0; foreach (Joueur j in joueurs) { i++; } if (i == 0) b = false; else b = true; return b; } // modification du mot de passe du joueur public void modifierMDP(Joueur j, String mdp) { try { Joueur joueur = (from x in db.Joueur where x.Pseudo == j.Pseudo select x).Single(); joueur.Password = mdp; db.SubmitChanges(); } catch (Exception e) { throw e; } } //suppression d'un joueur public void deleteJoueur(Joueur joueur) { try { Joueur j = (from x in db.Joueur where x.Pseudo == joueur.Pseudo select x).Single(); db.Joueur.DeleteOnSubmit(j); db.SubmitChanges(); } catch (Exception e) { Console.WriteLine(e.Message); } } // ajouter un canon au joueur. public void ajouterCanon(Joueur j) { try { Joueur joueur = (from x in db.Joueur where x.Pseudo == j.Pseudo select x).Single(); joueur.NbCanon = (joueur.NbCanon) + 1; joueur.ArgentEnPoche = (joueur.ArgentEnPoche) - 100000; db.SubmitChanges(); j.ArgentEnPoche = joueur.ArgentEnPoche; j.NbCanon = joueur.NbCanon; } catch (Exception e) { Console.WriteLine(e.Message); } } //vérifier si assez d'argent pour acheter un canon public Boolean checkArgent(String pseudo) { Boolean b = false; Joueur joueur; try { joueur = (from j in db.Joueur where j.Pseudo == pseudo select j).Single(); if (joueur.ArgentEnPoche >= 100000) b = true; else b = false; } catch (Exception e) { Console.WriteLine(e.Message); } return b; } } }
DataManager.cs
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Prototype2Screens { class DataManager { private static Joueur joueur; public static void setJoueur(Joueur j) { joueur = (new DataAccess()).getJoueur(j); } public static Joueur getJoueur() { return joueur; } } }
Auriez vous une idée d'où ça peut venir ? Comment je peux corriger ça?
En vous remerciant d'avance !
Evenae
Edit: s'il vous manque des informations n'hésitez pas a demander.
Partager