Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Web avec .NET > ASP.NET
ASP.NET ASP.NET -Forum d'entraide sur le Développement Web en ASP.NET. Avant de poster -> FAQ ASP.NET, Articles ASP.NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/12/2012, 12h53   #1
Tazmani05
Invité de passage
 
Homme
Inscription : mai 2012
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2012
Messages : 10
Points : 1
Points : 1
Par défaut Error : Object must implement IConvertible.

Bonjour à tous,

J'obtiens toujours l'erreur suivante (Object must implement IConvertible. ) et je me demandais si vous pouviez m'aider.

Je souhaite appeler une méthode delete depuis une GridView (qui tire sa source de donné d'un object data source).

Mon code marche, l'entrée est bien supprimé de la base de donnée ! mais j'ai une page d'erreur qui s'affiche à la fin au lieu de revenir sur la page de départ.

Voilà la méthode appelée dans DeleteRow

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
 
 
            int index = e.RowIndex;
 
 
            String convID = GridView1.Rows[index].Cells[1].Text ;
 
            Parameter p = new Parameter("IDconversation", TypeCode.String);
            p.DefaultValue = convID;
 
            ObjectDataSourceGetMyMessages.DeleteParameters.Add(p);
 
            ObjectDataSourceGetMyMessages.Delete();
 
 
 
        }
Voilà la méthode Delete

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
 
 public void DeleteConversation(String IDconversation)
        {
 
            try
            {
 
                string connectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
 
                using (SqlConnection cn = new SqlConnection(connectionString))
                {
 
 
                    String query = "DELETE FROM Conversation WHERE IDconversation = @idConv";
 
                    SqlCommand cmd = new SqlCommand(query, cn);
 
                    SqlParameter p = new SqlParameter("@idConv",SqlDbType.UniqueIdentifier);
                    p.Value = new Guid(IDconversation);
 
 
                    cmd.Parameters.Add(p);
 
                    cn.Open();
                    cmd.ExecuteNonQuery();
                    cn.Close();
 
 
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

Je passe en paramètre juste l'ID d'une conversation (la clé primaire que je souhaite supprimer).



Merci d'avance pour vos réponses
Tazmani05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 13h56   #2
Bluedeep
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 6 544
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 52
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 6 544
Points : 13 893
Points : 13 893
Bonjour

Quelle ligne lève l'exception ?
__________________

Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


Une réponse vous a aidé ? utiliser le bouton

"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 14h17   #3
Tazmani05
Invité de passage
 
Homme
Inscription : mai 2012
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2012
Messages : 10
Points : 1
Points : 1
Hello et merci de ta réponse,

Justement en mode déboguage, c'est un peu bizarre, les deux méthodes vont "jusqu'au bout" et l'erreur n'est pas capté par mon try, catch ... elle est pas arrêter et il m'affiche directement la page d'erreur dans mon navigateur...

En modifiant un peu mon code je suis tombé là dessus, je pense que le problème vient du SQLParameter :

Si je change pour le code suivant

Code :
1
2
3
4
 
 Guid id = new Guid(IDconversation);
 
                    SqlParameter p = new SqlParameter("@idConv", SqlDbType.UniqueIdentifier).Value = id;
Je me retrouve avec un erreur me disant :

Impossible de convertir implicitement le type 'Object' en 'System.data.SQLclient.SqlParameter'.Une conversion explicite existe (un cast est-il manquant ?)

Il faudrait donc que je modifie mon paramètre sql...
Tazmani05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 15h15   #4
Tazmani05
Invité de passage
 
Homme
Inscription : mai 2012
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2012
Messages : 10
Points : 1
Points : 1
J'ai trouvé mon erreur il suffit de préciser que le paramètre était de type Object et non pas String,

Voilà mon code si ça peut en aider d'autres :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 
   protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
 
 
            int index = e.RowIndex;
 
 
            String convID = GridView1.Rows[index].Cells[1].Text ;
 
            Parameter p = new Parameter("IDconversation", TypeCode.Object);
            p.DefaultValue = convID;
 
            ObjectDataSourceGetMyMessages.DeleteParameters.Add(p);
 
            ObjectDataSourceGetMyMessages.Delete();
 
 
 
        }
Et pour la méthode Delete

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
   public void DeleteConversation(Guid IDconversation)
        {
 
            try
            {
 
                string connectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
 
                using (SqlConnection cn = new SqlConnection(connectionString))
                {
 
 
                    String query = "DELETE FROM Conversation WHERE IDconversation = @idConv";
 
                    SqlCommand cmd = new SqlCommand(query, cn);
 
 
                    cmd.Parameters.Add("@idConv", SqlDbType.UniqueIdentifier).Value = IDconversation;
 
 
 
                    cn.Open();
                    cmd.ExecuteNonQuery();
                    cn.Close();
 
 
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

Merci encore et à bientôt sur nos claviers
Tazmani05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 15h28   #5
Bluedeep
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 6 544
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 52
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 6 544
Points : 13 893
Points : 13 893
Citation:
Envoyé par Tazmani05 Voir le message
Si je change pour le code suivant

Code :
1
2
3
4
 
 Guid id = new Guid(IDconversation);
 
                    SqlParameter p = new SqlParameter("@idConv", SqlDbType.UniqueIdentifier).Value = id;
Je me retrouve avec un erreur me disant :

Impossible de convertir implicitement le type 'Object' en 'System.data.SQLclient.SqlParameter'.Une conversion explicite existe (un cast est-il manquant ?)

Il faudrait donc que je modifie mon paramètre sql...
Il faudrait déjà écrire du code qui se compile syntaxiquement; ta ligne au dessus ne peut pas se compiler.

Il est impossible qu'elle ait pu être exécutée.

La ligne correcte :

Code :
1
2
			SqlParameter p = new SqlParameter("@idConv", SqlDbType.UniqueIdentifier);
			p.Value = id;

Par ailleurs, ton handler d'exception ne sert à rien, puisqu'il relance l'exception.

Test ton code dans un programme console pour voir avant de tester sur browser.
__________________

Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


Une réponse vous a aidé ? utiliser le bouton

"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h39.


 
 
 
 
Partenaires

Hébergement Web