C#windows窗体程序中的“指定的强制转换无效”错误
我有一个“指定演员阵容无效”错误。 C#中的Windows表单应用程序。 我正在尝试从表中检索值。 值是smallint或数字(我试过两个字段,都给我相同的错误),我尝试将它存储在一个int变量中。
这里是来源:
using (SqlDataReader rdr = cmd.ExecuteReader()) //"select * from table where fieldname = " + value { while (rdr.Read()) { int number = (int)rdr["quantity"]; // error is here
rdr["quantity"]
将是一个盒装的东西。 如果它不是int
那么你不能将它直接拆箱到int
(这是你想要做的),因为你必须首先将它拆箱到适当的类型(比方说, short
)。 但这太麻烦了,为了清楚起见,你最好说
Convert.ToInt32(rdr["quantity"]);
if(rdr["quantity"].GetType() != typeof(int)) throw new InvalidOperationException( "quantity is a " + rdr["quantity"].GetType()); int number = (int)rdr["quantity"]; // error is here
愚蠢的建议,也许 – 但你有没有考虑尝试这个 – 从你的SqlDataReader
获取结果作为object
的实例,然后检查它是什么类型? 没有人能比CLR型系统更好地告诉你它到底是什么! 🙂
using (SqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { object obj = rdr["quantity"]; if(obj != null) { string objType = obj.GetType().FullName; } } }
如果你确实得到了一个值,你可以检查它是什么类型,并希望相应地转换它,具体取决于你的结果。
我打赌quantity
是NULL
,这不是一个整数。
尝试两种选择之一。
int number = rdr.getInt32(rdr.GetOrdinal("quantity"));
要么
int number = int.parse(rdr["quantity"].ToString());
既然你说你知道应该是什么值,因为你创建了数据库…你能检查rdr [“quantity”]是否有值然后对它运行try解析?
if(rdr["quantity"] != null) { int? number = null; if(int.TryParse(rdr["quantity"].ToString(), out number)) { Console.WriteLine("Hurray, I have an int. Up vote Coov!"); } }
sl_id = Convert.ToInt32(lblintroducerid.Text.ToString()); sl_rank = Convert.ToInt32(lblassorank.Text.ToString());
你有没有尝试过
int number=convert.toint16(rdr["quantity"]);
尝试使用SqlDataReader的GetInt32()
rdr.GetInt32(rdr.GetOrdinal("quantity"));