DataReader具有重复的列名称

时间:2008-12-10 22:37:36

标签: ado.net

尝试从具有多个具有相同名称的列的DataReader获取数据的最佳方法是什么?

由于涉及的工作量很大,而且我们不希望通过更改我们用来检索数据的存储过程而失去供应商的支持,我试图找到另一种方法来访问一个列,在datareader中显示多次,而不必重写存储过程。

任何想法?

编辑: 好吧,实际从datareader填充的函数在多个地方使用,因此有可能由不同的存储过程调用该函数。我做的是使用索引来执行GetName以检查它是否是正确的列,如果是,则拉取其值。

4 个答案:

答案 0 :(得分:3)

如果您知道列的索引,则通过索引访问它。

答案 1 :(得分:1)

你不能使用列序数吗? 0表示第1,1表示第2,依此类推?

答案 2 :(得分:1)

您必须按索引号引用该列; ie reader [5] .ToString();阅读第5栏中的数据。

答案 3 :(得分:0)

基于“编辑”段落中描述的原始发布者的方法,这是一个扩展方法,该方法将根据列名和该名称的索引给出值,例如,对于名称的第一个实例,为0;对于名称的第一个实例,为1。第二,等等:

using System;

namespace WhateverProject {

    internal static class Extentions {

        // If a query returns MULTIPLE columns with the SAME name, this allows us to get the Nth value of a given name.
        public static object NamedValue(this System.Data.IDataRecord reader, string name, int index) {
            if (string.IsNullOrWhiteSpace(name)) return null;
            if (reader == null) return null;
            var foundIndex = 0;
            for (var i = 0; i < reader.FieldCount; i++) {
                if (!reader.GetName(i).Equals(name, StringComparison.CurrentCultureIgnoreCase)) continue;
                if (index == foundIndex) return reader[i];
                foundIndex++;
            }
            return false;
        }
    }
}

按以下方式使用它:

var value1 = reader.NamedValue("duplicatedColumnName", 0);
var value2 = reader.NamedValue("duplicatedColumnName", 1);