I have a query whose results look like
Blue
OrangeRed
Black
Green
Silver
Red
I intend to make a list of System.Drawing.Color objects out of this result set. When I run the program I'm getting the InvalidCastException. All of those colors are definitely in the enum of Color. Why am I getting this exception?
private List<System.Drawing.Color> BuildColorList()
{
List<System.Drawing.Color>ColorList = new List<System.Drawing.Color>();
using (SqlConnection con = new SqlConnection(cs))
{
using (SqlCommand cmd = new SqlCommand("select color from Colors", con))
{
con.Open();
cmd.CommandType = CommandType.Text;
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
System.Drawing.Color color = (System.Drawing.Color)rdr["color"];
ColorList.Add(color);
}
}
return ColorList;
}
}
You cannot do a cast: the query returns a System.String object, which cannot be cast to a System.Drawing.Color directly. Instead, you need to use Color.FromName(string) method instead:
private List<System.Drawing.Color> BuildColorList()
{
List<System.Drawing.Color>ColorList = new List<System.Drawing.Color>();
using (SqlConnection con = new SqlConnection(cs))
{
using (SqlCommand cmd = new SqlCommand("select color from Colors", con))
{
con.Open();
cmd.CommandType = CommandType.Text;
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
System.Drawing.Color color = System.Drawing.Color.FromName((string)rdr["color"]);
ColorList.Add(color);
}
}
return ColorList;
}
}
Replace this
System.Drawing.Color color = (System.Drawing.Color)rdr["color"];
with this
System.Drawing.Color color =Color.FromName((string)rdr["color"]);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With