11
ディクショナリ フィールド = 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"]);

これを行うと泣きたくなりますが、この方法以外の列名による型固有の検索メソッドの使用方法がわかりません。もっと良い方法があることを教えてください。これは特にDB2向けですが、可能であればMS Sqlでもソリューションが機能することを望みます

4

2 に答える 2

19

メソッドを探しています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));
    }
}
// ...
于 2010-07-12T13:32:25.757 に答える