指定的强制转换无效错误

时间:2013-10-31 11:40:26

标签: c# wpf sql-server-ce

我收到错误消息“指定的演员表无效”。我不知道该怎么做,有点但不行。

        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++;
        }

3 个答案:

答案 0 :(得分:1)

第1列是双倍的吗?这似乎是你的问题所在。

更改;

totalTax.Add((double)dr2[1]);

totalTax.Add((dr2.GetDouble(1));

该列可以为空吗?如果是的话,也许会更好。

totalTax.Add((double)(dr2[1] ?? (object)0.0));

此实例中的空字段表示零税。

我要说第1列不是doublefloatinteger(所有这些演员都可以使用)。它可能不会DbNull,因为它会引发NullReferenceException(虽然我愿意在此基础上予以纠正)。

答案 1 :(得分:0)

你在两个字段中得到什么类型的值如果你应该使用totalTax.Add((dr2.GetDouble(1));而不是totalTax.Add((double)dr2 [1]);。

答案 2 :(得分:0)

需要检查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++;
}