2010-07-12 18 views
6
 
Dictionary Fields = new Dictionary(); 
for (int i = 0; i < reader.FieldCount; i++) 
{ 
    Fields.Add(reader.GetName(i), i); 
} 

this._MyField1 = reader.GetString(Fields["field1"]); 
this._Myfield2 = reader.GetInt16(Fields["field2"]); 

這樣做讓我想哭,但我似乎無法弄清楚如何使用列名以外的類型特定檢索方法這種方式。請告訴我有更好的方法。這是specificly對於DB2,但我想解決的MS SQL工作也是可能的話DataReader.GetString()通過列名

回答

15

您正在尋找的GetOrdinal方法:

this._MyField1 = reader.GetString(dr.GetOrdinal("field1")); 
this._Myfield2 = reader.GetInt16(dr.GetOrdinal("field2")); 

我一般緩存序在一個匿名類型的性能和可讀性:

// ... 
using (IDataReader dr = cmd.ExecuteReader()) 
{ 
    var ordinals = new { 
          Foo = dr.GetOrdinal("Foo"), 
          Bar = dr.GetOrdinal("Bar") 
         }; 

    while (dr.Read()) 
    { 
     DoSomething(dr.GetString(ordinals.Foo), dr.GetInt16(ordinals.Bar)); 
    } 
} 
// ... 
+0

好吧,現在我覺得很蠢 – 2010-07-12 13:41:07

+1

這是一個非常簡潔的想法! – 2016-03-01 14:29:03

+0

偉大的工作,tnx – DaniKR 2016-04-09 22:52:27