2015-11-13 22 views
0

我正在創建一個訪問MySQL數據庫的系統,將項目作爲數據集表格檢索,並將每行的項目設置爲對象中的變量。我遇到的問題是,當將datarow.ItemArray [x]轉換爲一個整數時,我收到錯誤:System.InvalidCastException。 我檢查了數據庫,數據庫中的Item被定義爲Int(10)。 我也通過在Visual Studio中調試來檢查數據行,並且我試圖以整數形式投射的項目的值爲1. 我將在下面發佈我的代碼,但如果其他人有此問題並且可能知道它爲什麼會不勝感激。將DataRow項目轉換爲Int C時出錯#

foreach (DataRow dr in ds.Tables[0].Rows) 
{ 
    Group group = new Group(); 
    group.TagID = (int)dr.ItemArray[0]; 
    group.Name = dr[1].ToString(); 
    group.Parent = parent; 

這是班級組。

class Group 
{ 
    private int tagID; 
    private string name; 
    private Group parent; 

    List<Group> children = new List<Group>(); 
    List<Tags> tags = new List<Tags>(); 

DataRow.ItemArray

+0

使用調試器,是什麼類型'博士[0]'?你也可以看看'ds.Tables [0] .Columns [0] .DataType' –

+0

Name =「UInt32」FullName =「System.UInt32」 –

+0

從圖像看來,你正在將int轉換爲int。嘗試只刪除演員。 –

回答

0

所以它是一個UInt32而不是Int32,然後將它轉換爲是:

group.TagID = (int)(uint)dr[0]; 

您還可以使用Field方法,我喜歡,因爲它也支持nullables :

group.TagID = (int)dr.Field<uint>(0); 

A第三個選項(在這種情況下可能是最好的)是使用System.Convert.ToInt32

group.TagID = System.Convert.ToInt32(dr[0]); 
+0

然後我需要將我的對象組定義爲無符號整數。這是一個正確的答案,但我會用Stephens解析一個toString方法。 –

+0

「試試這個然後int.Parse(dr.ItemArray [0] .ToString()); - 史蒂夫布里克納1分鐘前」 –

+0

@JonnyWebb:我不會將我的價值轉換爲不同的類型(其中還包括本地化問題)然後通過'int.Parse'回到不同的類型。這很容易出錯並且效率低下。爲什麼不讓'TagID'也是'uint'或者將數據庫中的值改爲'int'? –

1

group.TagID = int.Parse(dr.ItemArray [0]的ToString());

0

您已使用INT(10),在MySql中,這意味着它有10位數字。 你提到的數據類型是UInt32。

所以解決方案是簡單地將它轉換成UInt32,而不是使用Integer。 或者,它通過使用Convert.ToInt32

轉換成間請看下圖:

grou.TagID = Convert.ToInt32(dr.ItemArray[0])