&引用;指定的强制转换无效";C#windows窗体程序中出错
我有一个“指定的强制转换无效”错误。C#中的Windows窗体应用程序。我正在尝试从表中检索值。该值要么是smallint,要么是数值(我尝试了两个字段,两个字段都给出了相同的错误),我尝试将其存储在int变量中 以下是消息来源:&引用;指定的强制转换无效";C#windows窗体程序中出错,c#,sql-server,C#,Sql Server,我有一个“指定的强制转换无效”错误。C#中的Windows窗体应用程序。我正在尝试从表中检索值。该值要么是smallint,要么是数值(我尝试了两个字段,两个字段都给出了相同的错误),我尝试将其存储在int变量中 以下是消息来源: using (SqlDataReader rdr = cmd.ExecuteReader()) //"select * from table where fieldname = " + value { while (rdr.Read()) { int num
using (SqlDataReader rdr = cmd.ExecuteReader()) //"select * from table where fieldname = " + value
{
while (rdr.Read())
{
int number = (int)rdr["quantity"]; // error is here
试试这两个选项中的一个
int number = rdr.getInt32(rdr.GetOrdinal("quantity"));
或
你试过了吗
int number=convert.toint16(rdr["quantity"]);
rdr[“数量”]
将是一个装箱的东西。如果它不是int
,则不能将其直接解装箱到int
(这就是您要做的),因为您必须首先将其解装箱到适当的类型(例如,short
)。但这太麻烦了,所以为了清楚起见,你最好说
Convert.ToInt32(rdr["quantity"]);
我打赌
quantity
是NULL
,它不是整数。尝试使用SqlDataReader的GetInt32()
可能是一个愚蠢的建议——但您是否考虑过尝试一下——从
SqlDataReader
获取结果作为对象的实例,然后检查它是什么类型?没有人能比CLR类型系统更好地告诉您它到底是什么!:-)
如果您确实得到了一个值,您可以检查它是什么类型的,并希望根据您的结果相应地转换它。因为您说您知道该值应该是什么,因为您创建了数据库。。。您能否检查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!");
}
}
您是否尝试过转换.toint16(rdr[“quantity”];第一个选项不是有效的重载,第二个无法编译。Oops,修复了我的拓扑,正在从内存写入。我不知道这是如何在数字变量中分配数量的。从逻辑上讲,如果我right@jello它将抛出一个异常,告诉您rdr的类型[“数量”]是。不知道这一点,所有这些答案都是空穴来风。因为我们所知道的“数量”是一个friggen字节数组。把它放在你的代码中并运行它。顺便说一句,当我说“运行它”时“我不是说在发布模式下运行它。在visual studio的调试模式下运行它。我明白了。在本例中,我创建了数据库,因此我知道字段的数据类型are@jello是的,您可能知道数据库中的数据类型,但是您显然不知道.NET等效类型是什么,或者它的DBNULL,因此“指定的强制转换无效”消息
Convert.ToInt32(rdr["quantity"]);
rdr.GetInt32(rdr.GetOrdinal("quantity"));
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
object obj = rdr["quantity"];
if(obj != null)
{
string objType = obj.GetType().FullName;
}
}
}
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());