Cast spécifié non valide [Résolu]

Signaler
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008
-
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
Statut
Membre
Dernière intervention
17 mars 2011
-
bonjour,
je débute en C# et j'ai rencontré un problème auquel je ne parviens à comprendre quelle est-elle.
voici le code ci dessous et le message est le suivant : "le cast spécifié n'est pas valide"
 
public void ChargerListBox(string strRequete)
        {
        try
            {
                OleDbConnection oConnection = new OleDbConnection(strConnexion);
                OleDbCommand oCommand = new OleDbCommand(strRequete, oConnection);
                oConnection.Open();
                OleDbDataReader oReader = oCommand.ExecuteReader();
                do
                {
                    LB.Items.Clear();
                    //        MessageBox.Show(oReader.GetName(0));
                    while (oReader.Read())
                    {
                        LB.Items.Add(oReader.GetString(0));
                    }
                }
               while (oReader.NextResult());
                oReader.Close();
                oConnection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("L'erreur suivante a été rencontrée :" + ex.Message);
            }
        }
A voir également:

9 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
55
Salut,

Voire la documentation en ligne:
http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbdatareader.getstring.aspx

"No conversions are performed; therefore the data retrieved must already be a string.
Call IsDBNull to look for null values before calling this method."

<hr />
-My Blog-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
55
GetValue qui retourne un object ne pourrait-il pas faire l'affaire ?

<hr />
-My Blog-
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
D'ailleurs au passage tu ne fermes pas tes connections et ne disposent pas tes objets, en cas d'echec ou pas.
Afin de garantir cette opération instancies tes objets connections et commande de la manière sivante :

using( OleDbConnection oConnection = new OleDbConnection(strConnexion))
{
                using (OleDbCommand oCommand = new OleDbCommand(strRequete, oConnection))
               {
               }
}

::|The S@ib|::
MVP C#.NET
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

Merci Bidou


en effet j'avais des valeurs null ce qui me posait problème, ainsi j'ai pu répondre au problème

TheSaib, je prends en notes tes remarques afin d'améliorer mon code !!
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

En revache je ne parvien spas à afficher dans des labels certains champs de ma base de données comme les champs numérique de ma base de données ACCESS pourtant il ne sont pas vide
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Une exception ... une erreur ....

::|The S@ib|::
MVP C#.NET
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

il me m'était une erreur de cast aussi mais j'ai compris mon erreur
 je faisai
label1.Text = oReader.GetString(0)
or il fallait faire ainsi
label1.Text = string.Format( "{0}" , oReader.GetInt16(0))

Par contre, j'ai encore une autre question :
comment est ce que l'on peut faire un switch avec un equals() ?
car je veux faire une fonction qui a comme paramètre une List<Label> et une requeteSQL
et cette fonction affichera respectivement les champs dans les labels correspondants
champ1 => label1
champ2 => label2

donc j'ai fait le script suivant :

do 
   {
   while(oReader.Read())
      {
      int i =0;
      while (oReader.FieldCount() > i)
         {
         // je veux faire quelquechose qui ressemble à cela
          switch (oReader.GetFieldType.Equals(???) )
            {
            case (string) :   Tlabel[i].Text = oReader.GetString(i);
            case (Int16) :   Tlabel[i].Text = string.Format("{0}",oReader.GetInt16(i));
            ....
            default : 
            }
         i++;
         }
      }
   }
while(oReader.NextResult());
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

Effectiement Bidou, c'est bien plus simple ainsi !! Je ne sai pourquoi je sui parti compliqué
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
Statut
Membre
Dernière intervention
17 mars 2011

bonjour,
je débute en VB.NET et j'ai rencontré un problème auquel je ne parviens à comprendre quelle est-elle.
voici le code ci dessous et le message est le suivant : "le cast spécifié n'est pas valide"
Public dread As OleDbDataReader
Private Sub remplir5()
filxegrid.Clear()
filxegrid.Rows = 1
cd.CommandText = "select * from fiche;"
cd.Connection = st
dread = cd.ExecuteReader
filxegrid.FormatString = dread.GetName(0) & " " & vbTab & dread.GetName(1) & " " & vbTab & dread.GetName(2) & " " & vbTab & dread.GetName(3) & " " & vbTab & dread.GetName(4) & " " & vbTab & dread.GetName(5) & " " & vbTab & dread.GetName(6) & " " & vbTab & dread.GetName(7) & " " & vbTab & dread.GetName(8) & " " & vbTab & dread.GetName(9) & " " & vbTab & dread.GetName(10) & " " & vbTab & dread.GetName(11) & " " & vbTab & dread.GetName(12) & " " & vbTab & dread.GetName(13) & " " & vbTab & dread.GetName(14) & " " & vbTab & dread.GetName(15) & " " & vbTab & dread.GetName(16) & " "
While dread.Read
filxegrid.AddItem(dread.GetString(0) & vbTab & dread.GetString(1) & vbTab & dread.GetString(2) & vbTab & dread.GetString(3) & vbTab & dread.GetString(4) & vbTab & dread.GetBoolean(5) & vbTab & dread.GetString(6) & vbTab & dread.GetString(7) & vbTab & dread.GetString(8) & vbTab & dread.GetString(9) & vbTab & dread.GetString(10) & vbTab & dread.GetString(11) & vbTab & dread.GetString(12) & vbTab & dread.GetString(13) & vbTab & dread.GetString(14) & vbTab & dread.GetString(15) & vbTab & dread.GetString(16))
End While
dread.Close()
End Sub