2013-10-31 54 views
-5

我收到一条错误,指出“指定的演员表无效”。我不知道该做什么,只是稍微有点不行。指定的演员表无效错误

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

吗? – Gusdor

+0

确实发生什么线错误请不要在标题中使用的标签,但标签正确的问题:http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles – bump

+4

什么是你的柱子的类型NS? –

回答

1

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

变化;

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

to;

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

列是否可以为空?如果是这样,也许这会更好。

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

本例中的空字段表示零税。

我想说,第1列不是double,floatinteger(所有这些演员将工作)。它可能不是DbNull,因为这会抛出NullReferenceException(虽然我愿意纠正)。

+1

-1'cast'应该可以工作..不需要'GetDouble'! – Anirudha

+1

两者都是一样的。这有什么帮助? –

+0

如果dr2为空将会失败。需要检查IsDBNull。 – Paparazzi

0

什么类型的值,你得到的两个领域,如果双击的,你应该使用totalTax.Add((dr2.GetDouble(1));而不是totalTax.Add((双)DR2 [1]);.

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