2012-05-10 21 views
0

DataRowオブジェクトからオブジェクトを作成したいのですが、これはDatarowオブジェクトをトラバースすることで行うことができます。ここでは制約はDataRow列は固定されていません。 DataRowが持つことができる列の数にばらつきがある可能性があります。私はすべての列がdatarowにあるかわからないので、ColumnNameに従ってDataRowをトラバースできません。例えばDatarowからオブジェクトを作成する

私は、DataRowオブジェクトは、すべての3つの列がある場合、これは正常に動作しますクラスに

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

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

を持っています。 それ以外の場合は例外を投げる

私を助けてください。

は、私はそれが正常に動作しているものの

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

を次のようにコンストラクタでスイッチケースを使用してみましたが、私はこのアプローチは罰金であるかどうかを知りたいです。

私はスイッチケースは、しかし、それはdefaultラベルを追加し、そこに例外をスローすることをお勧めします、OKだと思うあなたに

答えて

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

のこのラインを持つオブジェクトの配列は、あなたのためにあなたに感謝して、あなたは、単にのDataRowを取得することができますスイッチケースを使用すると本当に良い答えです – KB5

+0

あなたは大歓迎です。 – nnhthuan

0

をありがとう、この問題を解決するために助けてください。これにより、クエリに新しい列を追加するときに、多くのデバッグが不要になります。

0

あなただけの値をしたい場合は、コード

object[] itemArray = dr.ItemArray; 
関連する問題