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检索方法.请告诉我有更好的方法.这特别针对DB2,但我希望该解决方案也适用于MS Sql
Luk*_*keH 18
你正在寻找GetOrdinal方法:
this._MyField1 = reader.GetString(dr.GetOrdinal("field1"));
this._Myfield2 = reader.GetInt16(dr.GetOrdinal("field2"));
Run Code Online (Sandbox Code Playgroud)
我通常将序数缓存为匿名类型,以提高性能和可读性:
// ...
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));
}
}
// ...
Run Code Online (Sandbox Code Playgroud)