DeitY51
Messages postés20Date d'inscriptionlundi 16 mai 2005StatutMembreDernière intervention29 juillet 2005
-
20 mai 2005 à 14:38
DeitY51
Messages postés20Date d'inscriptionlundi 16 mai 2005StatutMembreDernière intervention29 juillet 2005
-
24 mai 2005 à 09:18
Bonjour,
voila mon code :
void BindGrid(){
// selection des jours feries de l'annee voulue
SqlCommand selection = new SqlCommand("SELECT * FROM jours_feries" +
" WHERE jf_date >= '01/01/" + anneecourante + "'" +
" AND jf_date <= '31/12/" + anneecourante + "'"+
" ORDER BY jf_date",
connexion
);
try{
connexion.Open();
SqlDataReader dr = selection.ExecuteReader();
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 mai 2005 à 14:43
Oui, le problème est bien une porté de variable, quand tu declares une variable elle est valable dans la boucle ou tu la declares, donc la dans le try, or t'as une erreur dans ton try, donc il va passer au catch, et dans ton catch, tu lui demande de fermer dr, alors qu'il n'existe pas encore, la bonne syntaxe est :
void BindGrid(){
// selection des jours feries de l'annee voulue
SqlCommand selection = new SqlCommand("SELECT * FROM jours_feries" +
" WHERE jf_date >= '01/01/" + anneecourante + "'" +
" AND jf_date <= '31/12/" + anneecourante + "'"+
" ORDER BY jf_date",
connexion
);
SqlDataReader dr;
try{
connexion.Open();
dr = selection.ExecuteReader();
GrilleJours.DataSource = dr;
GrilleJours.DataMember = "jours_feries";
GrilleJours.DataBind();
}
finally{
// avant de le fermer regarder s'il est bien ouvert, si le truc plante à l'ouverture (ce qui etait le cas, il va planter car tu vas essayer de fermer qqchose de pas ouvert), en gros tu rajoute un try sur le open, et tu geres cette erreur, plutot qu'une erreur générique
dr.Close();
connexion.Close();
}
}
DeitY51
Messages postés20Date d'inscriptionlundi 16 mai 2005StatutMembreDernière intervention29 juillet 2005 20 mai 2005 à 15:07
je viens d'essayer et maintenant j'ai :
Compiler Error Message: CS0165: Use of unassigned local variable 'dr'
Ce qui est logique. Le probleme c'est que pour resoudre le probleme, il faudrait que je place ca :
dr = selection.ExecuteReader();
en dehors du try, mais cette fonction pourrait me balacer une exception (enfin je pense parceque j'ai pas bien compris ce que faisait exactement cette fonction).
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 mai 2005 à 15:46
le ExecuteReader sert à faire la requete sur la base.
Par contre le problème est que tu ne geres pas correctement les exceptions, si c'est connexion.Open(); qui plante, dr selection.ExecuteReader(); ne sera pas executé, donc dr null, et tu pourras pas appeller l'event close a qqchose qui n'existe pas ...
Donc gere mieux les exceptions et tout les cas possibles, car la ce qui plante c'est ton finally, tu essayes de fermer des trucs qui ne sont pas ouvert ou qui n'existe encore pas.
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 21 mai 2005 à 14:15
.......
SqlDataReader dr = new SqlDataReader;
try{
connexion.Open();
dr = selection.ExecuteReader();
GrilleJours.DataSource = dr;
GrilleJours.DataMember = "jours_feries";
GrilleJours.DataBind();
}
finally{
if dr.IsOpen(){ <- me souviens plus du nom de cette méthode, mais elle existe.
dr.Close();
}
connexion.Close();
}
}
DeitY51
Messages postés20Date d'inscriptionlundi 16 mai 2005StatutMembreDernière intervention29 juillet 2005 24 mai 2005 à 09:18
Desole mais ca marche pas : le contructeur
SqlDataReader dr = new SqlDataReader;
n'existe pas. d'ailleur je trouve pas de constructeur correct a part avec un SqlCommand donc c'est un peu inutile!
Je reste donc avec mon probleme dont je n'arrive pas a trouver de solution. C'est la folie quand meme !