J'essayais d'ajouter des données d'une base de données à acombobox.
try
{
SqlCeCommand com = new SqlCeCommand("select * from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr.GetString(1);
cmbProductCategory.Items.Add(name);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Je reçois l'exception suivante:
Impossible de convertir l'objet de type 'System.Int32' en 'System.String'
Qu'est-ce que j'oublie ici?
De toute évidence, votre colonne n'a pas le type string
. Apparemment, c'est int
. Alors utilisez:
dr.getInt32(1).ToString()
ou même
dr.GetValue(1).ToString()
ce qui devrait être plus approximatif pour taper les changements dans la base de données.
En tant que conseil général, j'essaie au moins de suivre:
Accédez aux champs en utilisant leurs noms, par exemple.
dr.GetGuid(dr.GetOrdinal("id"))
Une telle chose peut également être résolue avec une méthode d'extension:
public T GetFieldValue<T>(this DbDataReader reader, string columnName)
{
return reader.GetFieldValue<T>(reader.GetOrdinal(columnName));
}
Note latérale: L'inclusion de traces de pile (ou au moins d'indiquer la ligne de l'exception dans votre code) peut être utile aux autres personnes qui essaient de vous aider. Comme vous pouvez le voir d'après les suppositions sauvages, ce que le coupable pourrait être. J'imagine que la trace de la pile ressemble à ceci:
SqlDataReader.GetString
YourCode.YourMethod
et que GetString
ressemble plus ou moins à ceci:
public string GetString(int index)
{
return (string) GetValue(index);
}
Votre colonne ne semble pas avoir le type int. Pour éviter des choses comme celle-ci, vous pouvez utiliser les noms de colonnes au lieu d'index.
try
{
SqlCeCommand com = new SqlCeCommand("select * from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr["yourColumnName"].ToString();
cmbProductCategory.Items.Add(name);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
OK OK. C'est résolu ....
Voici le code ..
try
{
SqlCeCommand com = new SqlCeCommand("select CategoryName from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr.GetString(0);
cmbProductCategory.Items.Add(name);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
J'ai changé la commande sql en une valeur unique et changé le numéro de colonne de dr.getstring () en 0 .. cela a fonctionné. Merci les gars pour l'aide .. J'attends plus parce que je ne suis qu'à mi-chemin dans mon projet ..