Exception database

cs_sawass Messages postés 19 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 11 juin 2011 - 9 juin 2011 à 04:27
cs_sawass Messages postés 19 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 11 juin 2011 - 9 juin 2011 à 16:03
Bonjour,
je suis planter dans le mème problème..j'ai une erreur quand je veux modifier un utilisateur dans la base de donnés.Une erreur dans cette ligne:
cmd1.ExecuteNonQuery();
l"exception est longue est à peut prét la suivante:
System.Data.Odbc.OdbcException (0x80131937): ERROR [07002] [Microsoft][Pilote ODBC Microsoft Access]Champ COUNT incorrect.
Voici mon code:
 private void bt_valider_Click(object sender, System.EventArgs e)
        {
            OdbcConnection cn = new OdbcConnection("DSN=cp3");
            
            try
            {
                cn.Open();
            }
            catch
            {
                MessageBox.Show("Failed to connect to data source");
            }
            finally
            {
                OdbcCommand comm;

                comm = new OdbcCommand("select * from utilisateur where login=?", cn);
                objParameter = comm.Parameters.AddWithValue("login", old_login.Text);
               // comm = new OdbcCommand("select * from utilisateur where login='@L'I", cn);
               // comm.Parameters.Add("@LI", old_login.Text);
                OdbcDataReader rs;
                try
                {
                    rs = comm.ExecuteReader();
                    if (rs.Read())
                    {
                        if (rs.GetString(1) == old_pass.Text)
                        {
                            rs.Close();
                            OdbcParameter objParameter2 = new OdbcParameter();
                            OdbcCommand cmd1 = new OdbcCommand("update utilisateur set login=?,mot_de_passe=?,niveau=?, where login=?", cn);
                          objParameter2=  cmd1.Parameters.AddWithValue("login", new_login.Text);

                          objParameter2 = cmd1.Parameters.AddWithValue("mot_de_passe", new_pass.Text);

                            if (new_type.SelectedItem.ToString() == "")
                                objParameter2 = cmd1.Parameters.AddWithValue("type", "u");

                            if (new_type.SelectedItem.ToString() == "Administrateur")

                                objParameter2 = cmd1.Parameters.AddWithValue("type", "a");
                           if (new_type.SelectedItem.ToString() == "utilisateur")

                                objParameter2 = cmd1.Parameters.AddWithValue("type", "u");

                           objParameter2 = cmd1.Parameters.AddWithValue("", old_login.Text);
                         

                            cmd1.ExecuteNonQuery();

                            MessageBox.Show(this, "Invalid login or password  ", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            old_login.Text = "";
                            old_pass.Text = "";
                            new_login.Text = "";
                            new_pass.Text = "";

                        }
                        else
                            MessageBox.Show(this, "Invalid login or password ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                        MessageBox.Show(this, "User does not exist ", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
                catch (Exception eo)
                {
                    MessageBox.Show(this, "Error System", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    old_login.Text = eo.ToString();

                }

            }
            cn.Close();
        }


j'ai besoin d'aide et c'est important pour moi.

8 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 juin 2011 à 09:45
Salut,

je pense pas que ça va tout régler mais déjà y'a un souci dans la requête d'update : tu as une virgule en trop après niveau=?.
0
cs_sawass Messages postés 19 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 11 juin 2011
9 juin 2011 à 12:04
Bonjour,
ça n'a rien changer.Toujours la mème erreur.
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 juin 2011 à 13:27
Pourrais-tu faire suivre l'exception dans sa totalité, voire avec la pile d'appels STP ?
0
cs_sawass Messages postés 19 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 11 juin 2011
9 juin 2011 à 13:42
la plile s'arrete dans cette ligne:
cmd1.ExecuteNonQuery();
Apparement il n'exéute pas la requète je ne sais pas pourquoi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 juin 2011 à 14:14
L'exception complète STP
Et quand on regarde de plus près on voit que tu fais des trucs bizarres avec tes paramètres.
Pourquoi assigner une variable objParameter2 à chaque fois ?
Pourquoi ton dernier paramètre n'est pas nommé ?
0
cs_sawass Messages postés 19 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 11 juin 2011
9 juin 2011 à 14:24
Voila une autre version et j'ai la mème erreur:

private void bt_valider_Click(object sender, System.EventArgs e)
{
OdbcConnection cn = new OdbcConnection("DSN=cp22");
int rs1;
try
{
cn.Open();
}
catch
{
MessageBox.Show("Failed to connect to data source");
}
finally
{
OdbcCommand comm;

comm = new OdbcCommand("select * from utilisateur where login=?", cn);
comm.Parameters.Add("login", login.Text);
OdbcDataReader rs;
try
{
rs = comm.ExecuteReader();
if (rs.Read())
{
if (rs.GetString(1) == pass.Text)
{
rs.Close();
OdbcCommand cmd1 = new OdbcCommand("update utilisateur set login=?,mot_de_passe=? where login=?", cn);
// DataSet Set = new DataSet();
cmd1.Parameters.Add("login", login_new.Text);
cmd1.Parameters.Add("mot_de_passe", pass_new.Text);
// if (type_new.SelectedItem.ToString().CompareTo("utilisateur"))
// cmd1.Parameters.Add("type", "u");
//String s =(type_new.GetSelected()).ToString();
// if (s.CompareTo("Administrateur")==1)
// cmd1.Parameters.Add("type", "a");
// else
// cmd1.Parameters.Add("type", "u");

// cmd1.Parameters.Add(" ", login.Text);

rs1 = cmd1.ExecuteNonQuery();
MessageBox.Show(this, "Utilisateur Modifié ", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
login.Text = "";
pass.Text = "";
login_new.Text = "";
pass_new.Text = "";




}
else
MessageBox.Show(this, "Ancien mot de passe invalid ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
MessageBox.Show(this, "Utilisateur inexistant ", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

}
catch (Exception eo)
{
MessageBox.Show(this, "Error System", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
login.Text = eo.ToString();

}

}
cn.Close();
}


L'excepton est la suivante;
System.Data.Odbc.OdbcException (0x80131937): ERROR [07002] [Microsoft][Pilote ODBC Microsoft Access]Champ COUNT incorrect
Et merci pour votre aide.
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 juin 2011 à 14:57
Je vois pas de champ COUNT dans ta requête ...
Toutefois il est normal que cette nouvelle version ne marche pas plus : ta requête attend 3 paramètres et tu lui en donnes que 2 (il manque le deuxième login pour la clause where).
Essaie, toujours avec cette deuxième version, de mettre ces paramètres :
cmd1.Parameters.Add("login", login_new.Text);
cmd1.Parameters.Add("mot_de_passe", pass_new.Text);
cmd1.Parameters.Add("login", old_login.Text);


Je sais pas s'il va aimé d'avoir 2 paramètres du même nom, mais il me semble qu'avec Access cela fonctionne comac (et c'est d'ailleurs pour ça qu'il faut ajouter les param dans l'ordre). A tenter quoi.

A noter également que je n'ai pas l'habitude de faire mes requêtes paramétrées ainsi. Travaillant avec Oracle ou MySQL on a des paramètres strictement nommés (genre : "SELECT * FROM T1 WHERE C1 = @c1")
0
cs_sawass Messages postés 19 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 11 juin 2011
9 juin 2011 à 16:03
Merci beaucoup jopop pour votre aide.C'est grâce à toi mon problème est résolu:Il a accépté 2 paramètres de mème nom merci une autre fois.
0
Rejoignez-nous