代码之家  ›  专栏  ›  技术社区  ›  KellCOMnet

DataReader.GetString()通过columnname

  •  7
  • KellCOMnet  · 技术社区  · 15 年前
    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的,但是如果可能的话,我希望解决方案也适用于mssql

    1 回复  |  直到 15 年前
        1
  •  18
  •   LukeH    15 年前

    你在找 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));
        }
    }
    // ...