C#中带有Dictionary的InvalidCastException

时间:2015-04-15 11:33:23

标签: c# mysql for-loop dictionary foreach

我在填写字典时遇到了一些问题,然后将数据放入ListBox中。 这是我的代码:

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

2 个答案:

答案 0 :(得分:1)

首先,检查rdr [&#34; artikel_id&#34;]和rdr [&#34; sum(aantal)&#34;]都不为空。

如果它们都不为null,请通过执行rdr [&#34; artikel_id&#34;]。GetType()。FullName并检查您是否可以将其实际转换为Int32来验证其运行时类型。

答案 1 :(得分: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);
}