sql – DataReader.GetString()通过columnname

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...