SqlDataReader向我显示InvalidCastException(C#Windows窗体)
InvalidCastException错误我得到了“price1=(float)r[“Price”];“我是c#和任何编程语言的新手,请指导我 假设价格是浮动的,您应该使用:SqlDataReader向我显示InvalidCastException(C#Windows窗体),c#,sqldatareader,.net,C#,Sqldatareader,.net,InvalidCastException错误我得到了“price1=(float)r[“Price”];“我是c#和任何编程语言的新手,请指导我 假设价格是浮动的,您应该使用: 假设价格是浮动的,您应该使用: 这意味着您的“价格”列不是浮点值-如果您这样强制转换,类型必须完全正确,您可以尝试更宽松的方式,将其转换为浮点值: price1 = r.GetFloat(0); // first column 如果“价格”列包含不同的数据类型(很可能),则应使用本机类型,并将变量设置为该类型,即,如果
假设价格是浮动的,您应该使用: 这意味着您的“价格”列不是浮点值-如果您这样强制转换,类型必须完全正确,您可以尝试更宽松的方式,将其转换为浮点值:
price1 = r.GetFloat(0); // first column
如果“价格”列包含不同的数据类型(很可能),则应使用本机类型,并将变量设置为该类型,即,如果它是一个double
makeprice1
adouble
变量,则应改为:
price1 = Convert.ToSingle(r["Price"]);
这意味着您的“价格”列不是浮点值-如果您这样强制转换,类型必须完全正确,您可以尝试更宽松的方式,将其转换为浮点值:
price1 = r.GetFloat(0); // first column
如果“价格”列包含不同的数据类型(很可能),则应使用本机类型,并将变量设置为该类型,即,如果它是一个double
makeprice1
adouble
变量,则应改为:
price1 = Convert.ToSingle(r["Price"]);
您可以用更安全的方式重写代码,如下所示:
price1 = reader.GetDouble(0);
所以,您可以确定,无论发生什么情况,阅读器和连接都将为您关闭和处理。如果调试这段代码,您将看到在运行时price1变量中将存储什么类型的对象,然后您可以在需要时转换为该类型,因为如果转换为float失败,我认为您没有从读取器正确获取float
SqlDataReader还有其他检索数据的方法,如果您确定Price是fload,您可以使用
reader.GetSingle
方法,例如,如果它是int,您可以使用reader.GetInt
等等。您可以以更安全的方式重写代码,如下所示:
price1 = reader.GetDouble(0);
所以,您可以确定,无论发生什么情况,阅读器和连接都将为您关闭和处理。如果调试这段代码,您将看到在运行时price1变量中将存储什么类型的对象,然后您可以在需要时转换为该类型,因为如果转换为float失败,我认为您没有从读取器正确获取float
SqlDataReader还有其他方法来检索数据,如果您确定Price是fload,您可以使用reader.GetSingle
方法,例如,如果它是int,您可以使用reader.GetInt
等等