首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySqlDataReader.GetSchemaTable ColumnOrdinal是实际数据的+1

MySqlDataReader.GetSchemaTable ColumnOrdinal是实际数据的+1
EN

Stack Overflow用户
提问于 2018-07-10 03:57:30
回答 0查看 261关注 0票数 1

我尝试使用序数值来从MySqlDataReader的每一行中提取数据,而不是使用字符串查找。为此,我使用了阅读器提供的GetSchemaTable来获得一个数据表,以便循环填充一个字典,该字典使用列名作为键,序号作为值。但是,数据表中的值是阅读器中列的实际位置的+1。

示例:我有一条sql语句,它返回具有以下模式的记录-

代码语言:javascript
复制
EventID, StreamUrl, CreatedStamp, ModifiedStamp

MySqlDataReader中的GetSchemaTable()方法将这些列映射为-

代码语言:javascript
复制
EventID = 1, StreamUrl = 2, CreatedStamp = 3, ModifiedStamp = 4

但是数据阅读器呈现数据的方式是-

代码语言:javascript
复制
EventID = 0, StreamUrl = 1, CreatedStamp = 2, ModifiedStamp = 3

代码:

代码语言:javascript
复制
Dictionary<string, int> _columns = new Dictionary<string, int>(35, StringComparer.CurrentCultureIgnoreCase);

DataTable _dt = _reader.GetSchemaTable();
foreach (DataRow _row in _dt.Rows)
{
    _columns.Add((string)_row["ColumnName"], (int)_row["ColumnOrdinal"]);
}

我在其他项目中使用过与IDataReader完全相同的代码,还没有见过这种情况。为什么模式表的序数值和读取器的实际序数值之间会有不匹配呢?

编辑:来自NuGet .Net版本的MySQLConnector版本- 8.0.11 - 4.6.1

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51253130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档