Problème de recuperation de la clé primaire et de conversion .

Résolu
sancho07 Messages postés 4 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 17 avril 2008 - 15 avril 2008 à 10:45
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 19 avril 2008 à 19:36
  DataColumn dcmag = dsMag.Tables["magasin"].Columns["magasin_id"];
                dsMag.Tables["magasin"].Constraints.Add("PRIMARY", dcmag, true);
                int rowindex = dataGridViewMagasin.CurrentRow.Index;

                DataRow drmag = dsMag.Tables["magasin"].Rows.Find(dataGridViewMagasin[0,rowindex]); (ici j'ai une erreur de conversion )
                drmag.Delete();

voici le message d'erreur suite a la ligne en bleue :
L'exception System.InvalidCastException n'a pas été gérée
  Message="Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.DataGridViewTextBoxCell' en type 'System.IConvertible'."
 
j'espere que vous aller pouvoir m'aider, merci d'avance.

cordialement
Pierre-Alexandre

-----------------

Technicien Informatique

Développeur Informatique

9 réponses

sancho07 Messages postés 4 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 17 avril 2008
17 avril 2008 à 08:45
j'ai tout modifié mon code en mettant directement la requete comme ci-dessous :

string requete = "DELETE FROM magasin WHERE magasin_id=" + dataGridViewMagasin.Rows[rowindex].Cells[0].Value + " ";
                macommande = new MySqlCommand(requete, FormLogin.maconnection);
                macommande.ExecuteNonQuery();

et cela fonctionne .
Pierre-Alexandre

-----------------

Technicien Informatique

Développeur Informatique
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 avril 2008 à 18:34
De mémoire/direct dans la zone de saisie ça donnerais

string xCmd = "INSERT INTO ritstat (orde,date,time,addrID,Scan_Num,capaciteit,vol,Gewicht,dag,chauffeur) VALUES (?orde, ?date, ?time, ?addrID, ?Scan_Num, ?capaciteit, ?vol, ?Gewicht, ?dag, ?chauffeur)";
...
cmd.Parameters.AddWithValue("?orde", dr["Order1"].ToString());
...

Plus complexe ?
Moi je trouve ça plus lisible, donc plus maintenable, sans parler de l'aspect sécurité.

/*
coq
MVP Visual C#
CoqBlog
*/
3
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
17 avril 2008 à 00:13
Salut,
Tu as essayé :

dataGridViewMagasin[0,rowindex].ToString()

??
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
17 avril 2008 à 00:13
Salut,
Tu as essayé :

dataGridViewMagasin[0,rowindex].ToString()

??
0

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

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 avril 2008 à 17:18
Salut,

Sinon les requêtes paramétrées c'est cool, histoire de minimiser les risques d'injection SQL.

/*
coq
MVP Visual C#
CoqBlog
*/
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
19 avril 2008 à 17:58
Salut coq

Et bien justement, je viens de me taper une requete "a la main" car je n'ai pas encore bien saisi le cheminement d'une requete parametrée qui me semble vu certains exemples encore plus complexe que la requete "a la main"

        string xCmd = "INSERT INTO ritstat (orde,date,time,addrID,Scan_Num,capaciteit,vol,Gewicht,dag,chauffeur) "
                    +" VALUES ("
                    + dr["Order1"].ToString()
                    +"," +dr["Datum"].ToString()
                    +",'" + dr["Uur"].ToString()+"'"
                    +"," + addrID
                    +"," + ScanNum
                    +"," + capa
                    +"," + vol
                    +"," + dr["Gewicht"].ToString()
                    +"," + dr["dag"].ToString()
                    +",'"+dr["chauffeur"].ToString()+"')";


        MySqlCommand cmd = new MySqlCommand(xCmd, MyConn.conn);
        try
        {
          int nUpd = cmd.ExecuteNonQuery();
        }
        catch (MySqlException e)
        {
          StreamWriter sw = new StreamWriter(archievPath + "duplicate.txt", true);
          MessageBox.Show(e.Message);
          sw.WriteLine("{0}\tline {1}\t{2}", curFile,numRec, e.Message);
          sw.Close();
          continue;
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 avril 2008 à 18:38
Sans parler aussi du fait que du coup on peut laisser le provider se débrouiller avec les DateTime pour la paramètres date, time etc afin qu'ils soient formatés correctement pour le type des colonnes.

/*
coq
MVP Visual C#
CoqBlog
*/
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
19 avril 2008 à 19:30
Merci Coq !


Allez ! tu m'encourage je vais essayer


Mais je crois aussi que suivant les languages, le ? peut etre un @ ou je ne sais quoi encore, je vais vérifier pour csharp


 


 
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 avril 2008 à 19:36
Ce n'est pas lié au langage client mais plus au provider/serveur SQL.
Il y a aussi des providers qui ne supportent pas les paramètres nommés, comme avec ODBC par exemple avec lequel on ne peut utiliser que les paramètres par position.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous