DataReader.GetString () через имя столбца - PullRequest
9 голосов
/ 12 июля 2010
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"]);

это заставляет меня плакать, но я не могу понять, как использовать методы поиска спецификаций типа по имени столбца, кроме этого.пожалуйста, скажите мне, что есть лучший способэто специально для DB2, но я бы хотел, чтобы решение работало и для MS Sql, если это возможно

1 Ответ

18 голосов
/ 12 июля 2010

Вы ищете метод 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));
    }
}
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...