指定的强制转换无效错误
Posted
技术标签:
【中文标题】指定的强制转换无效错误【英文标题】:Specified cast is not valid error 【发布时间】:2013-10-31 11:40:25 【问题描述】:我收到一条错误消息,提示“指定的演员表无效。”我不知道该怎么办,尝试了一点,但没有去。
List<string> productCode = new List<string>();
List<string> productName = new List<string>();
List<int> quantity = new List<int>();
List<double> totalPrice = new List<double>();
List<double> totalTax = new List<double>();
int orderID = 0;
SqlCeCommand com2 = new SqlCeCommand("SELECT TotalPrice, TotalTax FROM Order_Details WHERE OrderID = ('" + orderID + "')", con);
SqlCeDataReader dr2 = com1.ExecuteReader();
while (dr2.Read())
totalPrice.Add(dr2.GetDouble(0));
totalTax.Add((double)dr2[1]);
j++;
【问题讨论】:
错误出现在哪一行? 请不要在标题中使用标签,而是正确地标记问题:meta.stackexchange.com/questions/19190/… 你的列是什么类型的? 始终添加错误消息或异常的完整详细信息。 为什么 wpf 标签被编辑回来了? 【参考方案1】:第 1 列是双倍的吗?这似乎就是你的问题所在。
改变;
totalTax.Add((double)dr2[1]);
到;
totalTax.Add((dr2.GetDouble(1));
列是否可以为空?如果是的话,也许这样会更好。
totalTax.Add((double)(dr2[1] ?? (object)0.0));
此实例中的空字段表示零税。
我想说第 1 列不是double
、float
或integer
(所有这些转换都可以)。它可能不是DbNull
,因为那样会抛出NullReferenceException
(尽管我愿意对此进行更正)。
【讨论】:
两者相同。这有什么帮助? 如果 dr2 为 null 将失败。需要检查 IsDBNull。【参考方案2】:如果 Double 是您在两个字段中获得的类型值,您应该使用 totalTax.Add((dr2.GetDouble(1)); 而不是 totalTax.Add((double)dr2[1]);。
【讨论】:
【参考方案3】:需要检查 SQL 中的类型并匹配 .NET 中的类型 这应该指出你的问题
SqlCeCommand com2 = new SqlCeCommand("SELECT TotalPrice, TotalTax FROM Order_Details WHERE OrderID = ('" + orderID + "')", con);
SqlCeDataReader dr2 = com1.ExecuteReader();
while (dr2.Read())
if (dr2.IsDBNull(0))
Debug.WriteLine("dr2[0] isnull ");
else
Debug.WriteLine("dr2[0] = " + dr2[0].ToString());
totalPrice.Add(dr2.GetDouble(0));
if (dr2.IsDBNull(1))
Debug.WriteLine("dr2[1] isnull ");
else
Debug.WriteLine("dr2[1] = " + dr2[1].ToString());
totalTax.Add(dr2.GetDouble(1));
j++;
【讨论】:
以上是关于指定的强制转换无效错误的主要内容,如果未能解决你的问题,请参考以下文章
System.InvalidCastException:指定的强制转换无效。错误