Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    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

  2. #2
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 12 114
    Points
    12 114

    Par défaut

    Bonjour

    Quelle ligne lève l'exception ?

  3. #3
    Invité de passage
    Homme Profil pro
    Inscrit en
    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

    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...

  4. #4
    Invité de passage
    Homme Profil pro
    Inscrit en
    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

    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

  5. #5
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 12 114
    Points
    12 114

    Par défaut

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •