2015-04-15 54 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