Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Achat - Vente Informatique : fxavier, donzee Achat - Vente Divers : samix751, Ventura, ntouffe et 31 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Urgent : Problème entre C# et Sql Server

 
n°18672
Nadiya
Profil : Jeune recrue
Posté le 09-06-2007 à 21:37:40  profilanswer
 

Bonsoir, à l'endroit où j'ai mis un * dans le code, est l'endroit où se produit l'erreur, j'ai l'impression qu'il ne me retourne pas un int, mais le reste du programme fonctionne, le problème est juste là.
Merci d'avance.
Voilà le code :
static public void CréerCompte(PerComplet p)
        {
            DbConnection connection = UsineCommande.Usine.Con;
            DbCommand commande1 = UsineCommande.Usine.CreerComptePER;
            DbCommand commande2 = UsineCommande.Usine.CreerCompteAPP;
 
            connection.Open();
            try
            {
                commande1.Parameters["@per_nom"].Value = p.Nom;
                commande1.Parameters["@per_prenom"].Value = p.Prenom;
                commande1.Parameters["@per_mdp"].Value = p.MDP;
                commande1.Parameters["@per_email"].Value = p.Mail;
                commande1.Parameters["@per_organisateur"].Value = p.Organisateur;
                commande2.Parameters["@app_fk_gro"].Value = p.Idgroupe;
 
                int Id = ChercherIdPER(p.Nom, p.Prenom, p.Mail);
 
                commande2.Parameters["@app_fk_per"].Value = Id;
 
                if (commande1.ExecuteNonQuery() == 0 || commande2.ExecuteNonQuery() == 0)
                    throw new Exception("Echec d'insertion." );
 
            }
            catch (Exception e)
            {
                throw UsineException.ObtenirException(e.Message);
            }
            finally
            {
                connection.Close();
            }
        }
 
        static public int ChercherIdPER(String Nom, String Prenom, String Mail)
        {
            DbCommand commande = UsineCommande.Usine.ChercherIdPER;
             
            try
            {
                commande.Parameters["@per_nom"].Value = Nom;
                commande.Parameters["@per_prenom"].Value = Prenom;
                commande.Parameters["@per_email"].Value = Mail;
                DbDataReader r = commande.ExecuteReader();
                r.Read();
 *             return Convert.ToInt32(r.GetInt32(0));
                 
            }
 
            catch
            {
                throw new Exception("Erreur lors de la recherche de l'identifiant" );
            }
        }

n°18673
Nadiya
Profil : Jeune recrue
Posté le 09-06-2007 à 21:38:21  profilanswer
 

J'avais mis avant que je ne copie le code :
return r.GetInt32(0);

n°18674
Nadiya
Profil : Jeune recrue
Posté le 09-06-2007 à 22:02:32  profilanswer
 

J'ai changé mon code et le message d'erreur est "Un DataReader associé à cette commande est déjà ouvert. Il doit d'abord être fermé.":
 
static public void CréerCompte(PerComplet p)
{
DbConnection connection = UsineCommande.Usine.Con;
DbCommand commande1 = UsineCommande.Usine.CreerComptePER;
DbCommand commande2 = UsineCommande.Usine.CreerCompteAPP;
DbCommand commande3 = UsineCommande.Usine.ChercherIdPER;
 
connection.Open();
try
{
commande1.Parameters["@per_nom"].Value = p.Nom;
commande1.Parameters["@per_prenom"].Value = p.Prenom;
commande1.Parameters["@per_mdp"].Value = p.MDP;
commande1.Parameters["@per_email"].Value = p.Mail;
commande1.Parameters["@per_organisateur"].Value = p.Organisateur;
commande2.Parameters["@app_fk_gro"].Value = p.Idgroupe;
commande3.Parameters[0].Value = p.Nom;
commande3.Parameters[1].Value = p.Prenom;
commande3.Parameters[2].Value = p.Mail;
DbDataReader id = commande3.ExecuteReader();
id.Read();
commande2.Parameters["@app_fk_per"].Value = id;
 
if (commande1.ExecuteNonQuery() == 0 || commande2.ExecuteNonQuery() == 0)
throw new Exception("Echec d'insertion." );
 
}
catch (Exception e)
{
throw UsineException.ObtenirException(e.Message);
}
finally
{
connection.Close();
}
}

n°18704
cmoila
Profil : Membre
Posté le 19-06-2007 à 16:45:01  profilanswer
 

J'ai pas C# , donc je réponds un peu au pif.
 
deja décompose ta ligne "return" car elle fait plein de chose diférente suceptible de générer une erreur . ca te permettra de mieux voir ou le compilo butte.
 
return Convert.ToInt32(r.GetInt32(0));  
 
en
 
long l = r.GetInt32(0);  // verifie que c le bon type
// le convert , je pense qu'il sert a rien
return (int) l;
 
 
s'il te dit encore que tu dois fermer le datareader, c'est que tu a oublié une commande type close avant de faire le return avec la valeur.
 
 


Aller à :
Ajouter une réponse