2015-04-15 33 views
1

我在填充字典并将数据放入列表框后出现了一些问题。 这里是我的代码:InvalidCastException和C#中的词典

Dictionary<int, int> items = new Dictionary<int, int>(); 

MySqlCommand cmd = new MySqlCommand(query1, c.Connection); 
rdr = cmd.ExecuteReader(); 
while (rdr.Read()) { 
    //InvalidCastException HERE 
    items.Add((int)rdr["artikel_id"], (int)rdr["sum(aantal)"]); 
} 

for (int i = 0; i < items.Count(); i++) { 
    if (items.ElementAt(i).Value <= 0) { 
      listBoxStrings.Add("artikel_id: " + items.ElementAt(i).Key + ", besteld: " + items.ElementAt(i).Value); 
    } 
} 

foreach (string s in listBoxStrings) { 
//listbox 
    lb.Items.Add(s); 
} 
+0

'artikel_id'列的类型是什么? –

+0

都是整数,在我的分贝 – ernie379

+3

这看起来很奇怪'(INT)RDR [ “总和(aantal)”]',你的意思'(INT)RDR [ “aantal”]'? – oleksii

回答

1

首先,检查RDR [ “artikel_id”]和RDR [ “总和(aantal)”]都不能空。

如果他们都是不为空,做RDR [“artikel_id”]验证其运行时类型。的GetType()。全名,并检查你其实可以将其转换为的Int32。

+0

artikel_id是System.Int32和sum(aantal)是System.Decimal – ernie379

+0

试图改变你的'Dictionary'为''? –

+0

通过组合这2个答案解决了问题。谢谢! – ernie379

1

看起来你没有正确地拉着你的专栏。试试这个,看看是否/例外。

Dictionary<int, int> items = new Dictionary<int, int>(); 

MySqlCommand cmd = new MySqlCommand(query1, c.Connection); 
rdr = cmd.ExecuteReader(); 
while (rdr.Read()) { 
    //InvalidCastException HERE 
    int value1 = (int)rdr["artikelid"]; 
    int value2 = (int)rdr["besteid"]; 

    items.Add(value1,value2); 
} 
+0

由于它是一个System.Decimal,所以引发值2的异常。 – ernie379

+0

通过组合这2个答案解决了问题。谢谢! – ernie379