2012-05-10 53 views
0

我想從DataRow對象創建一個對象,可以通過遍歷Datarow對象來完成。但這裏的約束是DataRow列不固定。 DataRow可以有任何列的變化。我不能根據ColumnName遍歷DataRow,因爲我不知道哪些所有列將在數據行中。從Datarow創建對象

例如我有一個類

class Abc 
{ 
    string attrib1; 
    string attrib2; 
    string attrib2; 

    public Abc(DataRow dr) 
    { 
     attrib1 = dr["attrib1"].ToString(); 
     attrib2 = dr["attrib2"].ToString(); 
     attrib3 = dr["attrib3"].ToString(); 
    } 
} 

這將正常工作時,DataRow對象有三個列。 但如果不是,那麼這將拋出異常

請幫助我。

我已經在構造函數中使用如下

class Abc 
{ 
    string attrib1; 
    string attrib2; 
    string attrib2; 

    public Abc(DataRow dr) 
    { 
     foreach (System.Data.DataColumn dc in record.Columns) 
      { 
        switch (dc.ColumnName) 
        { 
       case "attrib1" : 
        attrib1 = dr["attrib1"].ToString(); 
        break; 
       case "attrib2" : 
        attrib2 = dr["attrib2"].ToString(); 
        break; 
       case "attrib2" : 
        attrib3 = dr["attrib3"].ToString(); 
        break; 
      } 
        } 
      } 
    }  

雖然它工作正常開關的情況下嘗試了,我想知道這種做法是否是好的。

請幫忙解決這個問題

謝謝

回答

0

算法不好。

1-請將「attrib1」,「attrib2」,「attrib3」設爲常量。

2-請參閱僞代碼:

if (dr[CONSTANT_ATT1] != null) then attrib1 = dr[CONSTANT_ATT1].ToString(); 
if (dr[CONSTANT_ATT2] != null) then attrib2 = dr[CONSTANT_ATT2].ToString(); 
if (dr[CONSTANT_ATT3] != null) then attrib3 = dr[CONSTANT_ATT3].ToString(); 
+0

感謝您對一個對象數組你回答它真的更好,使用開關盒 – KB5

+0

不客氣。 – nnhthuan

0

我覺得開關的情況是好的,但是,它的添加default標籤,並拋出一個異常,有一個好主意。當您向查詢添加新列時,這將爲您節省大量調試時間。

0

如果你只想要的值,你可以簡單地得到的DataRow與這行代碼

object[] itemArray = dr.ItemArray;