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);
}
}
"No conversions are performed; therefore the data retrieved must already be a string.
Call IsDBNull to look for null values before calling this method."
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))
{
}
}
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
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());