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"]);
выполнение этого заставляет меня хотеть кричать, но я, может казаться, не выясняю, как использовать тип specfic методы поиска именем столбца кроме этого пути. скажите мне, что существует лучший путь. это - specificly для DB2, но я хотел бы решение работать на MS Sql также, если это возможно,
Вы ищете метод 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));
}
}
// ...