我收到错误消息“指定的演员表无效”。我不知道该怎么做,有点但不行。
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++;
}
答案 0 :(得分: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
(虽然我愿意在此基础上予以纠正)。
答案 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++;
}