指定的强制转换无效错误

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 列不是doublefloatinteger(所有这些转换都可以)。它可能不是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:指定的强制转换无效。错误

如何修复 C# 中的“指定强制转换无效”错误?

C# LINQ 生成“指定的强制转换无效”错误

指定的强制转换在 Xamarin 表单中无效

Xamarin 形式:System.InvalidCastException:“指定的强制转换无效。”

DataReader:指定的强制转换无效 (Int32)