Problème de recuperation de la clé primaire et de conversion . [Résolu]

Signaler
Messages postés
4
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
17 avril 2008
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
  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

Messages postés
4
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
17 avril 2008

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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
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
*/
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
4
Salut,
Tu as essayé :

dataGridViewMagasin[0,rowindex].ToString()

??
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
4
Salut,
Tu as essayé :

dataGridViewMagasin[0,rowindex].ToString()

??
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

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

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
4
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;
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
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
*/
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
4
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


 


 
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
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
*/