2010-07-12 26 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"]); 

làm điều này làm cho tôi muốn khóc nhưng tôi dường như không thể tìm ra cách sử dụng phương pháp truy xuất specfic kiểu theo tên cột khác với cách này. xin vui lòng cho tôi biết có một cách tốt hơn. đây là specificly cho DB2, nhưng tôi muốn các giải pháp để làm việc cho MS Sql cũng nếu có thểDataReader.GetString() thông qua tên cột

Trả lời

15

Bạn đang tìm kiếm GetOrdinal phương pháp:

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

Tôi thường bộ nhớ cache ordinals trong một loại vô danh cho hiệu suất và khả năng đọc:

// ... 
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

ok, bây giờ tôi cảm thấy ngu ngốc –

+1

Đó là một ý tưởng thực sự gọn gàng! –

+0

công việc tuyệt vời, tnx – DaniKR

Các vấn đề liên quan