vas sur ce site la ==> http://rmdiscala.developpez.com/cours/
et plus particulièrement dans le chapitre 5 pour la POO
vas sur ce site la ==> http://rmdiscala.developpez.com/cours/
et plus particulièrement dans le chapitre 5 pour la POO
Bonjour cher ami,
merci pour le lien, je fais des recherches sur intranet également pour me documenter sur la POO et tt le reste, c'est pas évident mais je tacherai de faire de mon mieux.
je n'hésiterai pas à venir te demander conseil ou éclairecissement si j'ai besoin de toi (ça c'est sûr)
merci beaucoup
Bonjour l'ami,
voilà j'ai suivi tes recommandations et j'ai introduit le code comme j'ai pu comprendre:
---------------------------------------------------------------
j'espère ne pas avoir fait d'erreur parce qu'en utilisant ce code je n'arrive pas ni à écrire ni à vérifier la donnée sur ma BD:
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 protected bool CheckBase(string wos, string dateur) { //Nbre de lignes affectées bool bValid = true; // Déclaration de l'objet de connexion System.Data.SqlClient.SqlConnection oConnection; // Création de l'objet de connexion oConnection = new System.Data.SqlClient.SqlConnection(); // Paramétrage de la chaîne de connexion string sConnectionString; sConnectionString = "Server=SERVEUR;Initial Catalog=DB;Persist Security Info=True;User ID=user;Password=password"; oConnection.ConnectionString = sConnectionString; // Connexion à la base de données oConnection.Open(); // Déclaration de l'objet SqlCommand et de la requête SQL System.Data.SqlClient.SqlCommand oCommand; string sSQL; sSQL = "SELECT wos,dateur from [test] where wos = " + ListShop.Text + " and dateur = " + TextBoxJour.Text; // Création de l'objet SqlCommand oCommand = new System.Data.SqlClient.SqlCommand(sSQL, oConnection); // On appelle la méthode ExecuteNonQuery pour éxécuter notre commande if(oCommand.ExecuteNonQuery() > 0 ) bValid = false; return bValid ; } protected void BtnValidation_Click(object sender, EventArgs e) { if (CheckBase(ListShop.Text, TextBoxJour.Text)) { // Déclaration de l'objet de connexion System.Data.SqlClient.SqlConnection oConnection; // Création de l'objet de connexion oConnection = new System.Data.SqlClient.SqlConnection(); // Paramétrage de la chaîne de connexion string sConnectionString; sConnectionString = "Server=SERVEUR;Initial Catalog=DB;Persist Security Info=True;User ID=user;Password=password"; oConnection.ConnectionString = sConnectionString; // Connexion à la base de données oConnection.Open(); // Déclaration de l'objet SqlCommand et de la requête SQL System.Data.SqlClient.SqlCommand oCommand; string sSQL1; // Ecriture de la requête SQL SqlCommand command = new SqlCommand(); command.Connection = oConnection; sSQL1 = "INSERT INTO [test](wos, nombre, dateur)"; sSQL1 = sSQL1 + " VALUES('" + ListShop.Text + "','" + TextBoxNombre.Text + "','" + TextBoxJour.Text + "')"; // Création de l'objet SqlCommand oCommand = new System.Data.SqlClient.SqlCommand(sSQL1, oConnection); // On appelle la méthode ExecuteNonQuery pour éxécuter notre commande oCommand.ExecuteNonQuery(); // Fermeture de la connexion oConnection.Close(); lbErrors.Visible = false; } else { lbErrors.Visible = true; } }
message d'erreur :
Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'la valeur de textboxshop.text'
merci de m'aider là-dessus
Regarde ce que vaut sSQL1 au niveau de la ligne:et tu comprendras
Code : Sélectionner tout - Visualiser dans une fenêtre à part oCommand = new System.Data.SqlClient.SqlCommand(sSQL1, oConnection);
Bonjour l'ami,
sincèrement je suis un peu perdu là, est-ce que tu peux m'aider un peu plus ??
c'est pas évident pour moi je suis novice en .Net vous comprenez ..
merci
C'est quoi que tu comprends pas dans mon post?
je veux dire , pour moi la requête est correcte, je veux dire l'objet Sqlcommand est normalement déclaré.
avant de mettre en place cette procédure de test avant de faire une saisie, ça fonctionnait normalement, mais là dès que j'ai inité ce test, j'ai le message d'erreur que tu vois là.
merci
Le message d'erreur dit que tu passes un nom de colonne invalide dans ta requete.
C'est pourquoi je te dis de voir ce que vaut ta requête quand tu l'exécutes
mohe, je penses que tu ne connais pas l'existence du debuggeur.
Lorsque tu démarre ton application, tu peux dire à Visual studio de la "mettre en pause" à un endroit donné pour vérifier le contenu de tes variables.
Pour cela, place toi à l'endroit où tu désire arréter l'execution du programme, et fait F9. Lorsque tu va lancer le prog, il va s'arreter à cet endroit.
Ensuite, fait F10 pour faire du "pas a pas", F11 pour rentrer à l'interieur des methodes, ou F5 pour reprendre l'execution normale.
Utilise cette méthode pour vérifier ta requete SQL juste avant son execution.
As tu d'autres soucis, surtout de POO ? parceque si tu ne sais pas ce qu'est une classe, une methode, etc... Je me demande comment tu peux apréhender la gestion des evenements.
Bonjour Hed62,
et merci pour tes remarques qui sont bien placées et que j'accèpte volontiers (esprit sportif).
comme j'ai du le mentionner avant je suis novice en matière de Programmation .Net (c# et Asp) alors j'apprend en même temp que les exos que je fais.
déjà là j'ai un petit souci avec mon VS 2005, impossible de lancer le "debuger" (je le connais déjà Hed62), un message d'erreur survient m'indiquant que le deboguer ("MSVSMON.EXE" does not appear to be running on the remote computer ).
et pour le nom de la colonne j'ai bien vérifier , les nom sont exacts:
si j'enlève le bloc qui permet de faire le test sur ma BD , la saisie passe sans problème.
par contre là c'est pas le cas.
Dans le check base, ce ne serait pas :
plutot que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part sSQL = "SELECT wos,dateur from [test] where wos = " + wos + " and dateur = " + dateur;
Code : Sélectionner tout - Visualiser dans une fenêtre à part sSQL = "SELECT wos,dateur from [test] where wos = " + ListShop.Text + " and dateur = " + TextBoxJour.Text;
Aussi, utilise une constante globale pour la connectionString
Après meilleure relecture :
Il ne faut pas utiliser cela : ExecuteNonQuery est utile pour lancer tout requete autre que select (je ne m'étendrai pa sur la cohérence du nom de la fonction...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(oCommand.ExecuteNonQuery() > 0 )
Pour faire un SELECT il faut utiliser ExecuteQuery
Salut Hed62,
pour les deux strings SQL , j'utilise les nom des controles "ListShop.Text" et "TextBoxJour.Text" et non pas les variables string (wos, dateur) car c'est une infrormation saisie dont je veux tester la presence sur ma BD ou pas.
concernant "Executequery()", elle appartient à quel espace de nom ??, là le compilateur ne la reconnait pas.
je pense qu'il devrait y avoir un moyen plus simple pour faire ce test, qu'en pense-tu ??
Non il n'y a pas plus simple, à part utiliser la même connexion à la base de donnée pour les deux requête, ce qui te fait gagner des lignes de code, augmente la lisibilité et les performances.
Dans la méthode Check, tu passe deux paramètres, wos et dateur. Or dans ton code tu ne t'en sers pas : il y a donc une incohérence quelque part. Soit tu te sers des paramètres (mieux), soit tu les retires (moins bien car moins lisible, moins découplé, moins évolutif)
Pour le ExecuteQuery, je te laisse chercher sur la msdn![]()
En fait si, il y a plus simple, plus propre et plus performant:
Tu défini les colonnes wos et dateur comme étant uniques/clef primaire.
Ainsi, au insert, c'est la base de données qui rejetera la requete, et tu te recoltera une exception dans ton code C# (normalement, au pire le résultat de ExecuteQuery te précise l'echec)
Mieux vaut toujours confier les taches au outils les plus à même d'y répondre efficacement !
Merci Hed62,
j'avais pensé à la seconde solution justement, mais là il faudra personnaliser une exception pour afficher un message d'erreur et biensûr annuler la requête.
dis moi, "executereader" permet aussi de faire une recherche et voir si la donnée recherché existe ou pas.
est-ce qu'il fait l'affaire ??
Tout à fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // query = SELECT .... SqlCommand command = new SqlCommand(queryString, connection); SqlDataReader reader = command.ExecuteReader(); if(reader.Read()) { // deja en base } else { // Pas en base, on peut faire INSERT }
Salut Hed62,
c'est ce que je vais faire en effet, je l'avais déjà utilisé auparavant je l'ai complètement oublié celui là
je te reviendrai apès![]()
Partager