GetSqlValues是否获取隐藏字段

本文关键字:字段 隐藏 获取 是否 GetSqlValues | 更新日期: 2023-09-27 18:18:47

我想知道一个查询返回了多少列,以便创建一个这样大小的数组来读取结果。

使用SqlDataReader,我想做这样的事情:

object[] array = new object[rdr.FieldCount];
rdr.GetSqlValues(array);

,但我不确定我是否应该使用FieldCountVisibleFieldCount。(我甚至不确定隐藏字段是什么。但是我现在把它放在这里

GetSqlValues是否获取隐藏字段

这是来自GetSqlValues()的反编译代码

public virtual int GetSqlValues(object[] values)
{
    SqlStatistics statistics = null;
    int num3;
    try
    {
        statistics = SqlStatistics.StartTimer(this.Statistics);
        this.CheckDataIsReady();
        if (values == null)
        {
            throw ADP.ArgumentNull("values");
        }
        this.SetTimeout(this._defaultTimeoutMilliseconds);
        int num2 = (values.Length < this._metaData.visibleColumns) ? values.Length : this._metaData.visibleColumns;
        for (int i = 0; i < num2; i++)
        {
            values[this._metaData.indexMap[i]] = this.GetSqlValueInternal(i);
        }
        num3 = num2;
    }
    finally
    {
        SqlStatistics.StopTimer(statistics);
    }
    return num3;
}

可以看到,数组是根据visbleccolumns内部值进行检查的。这与VisibleFieldCount返回的值相同。

正如您所看到的,代码检查传递的数组的长度,并复制可以装入传递的数组的列的数量。因为(从文档上的VisibleFieldCount)隐藏字段被附加在内部数组的末尾,如果您传递FieldCount元素的数组,您将只检索可见字段。