加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – DataReader.GetString()通过columnname

发布时间:2020-12-12 07:05:21 所属栏目:MsSql教程 来源:网络整理
导读: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"]); 这样做让我想哭但我似乎
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

解决方法

您正在寻找 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));
    }
}
// ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读