gpt4 book ai didi

c# - MySqlDataReader.GetSchemaTable ColumnOrdinal 是实际数据的+1

转载 作者:行者123 更新时间:2023-11-29 05:04:28 24 4
gpt4 key购买 nike

我正在尝试使用序数值从 MySqlDataReader 的每一行中提取数据,而不是使用字符串查找。为了做到这一点,我使用了阅读器提供的 GetSchemaTable 来获取要循环的数据表,以填充一个字典,该字典使用列名作为键,序号作为值(value)。然而,数据表中的值是阅读器中列的实际位置的+1。

例子:我有一个 sql 语句返回带有模式的记录 -

EventID, StreamUrl, CreatedStamp, ModifiedStamp

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

EventID = 1, StreamUrl = 2, CreatedStamp = 3, ModifiedStamp = 4

但是数据读取器呈现数据的方式是——

EventID = 0, StreamUrl = 1, CreatedStamp = 2, ModifiedStamp = 3

代码:

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 使用了这个确切的代码,但没有看到这种情况发生。为什么模式表的序数值与读者的实际序数值不匹配?

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

最佳答案

这是 MySQL Connector/NET 中的一个已知错误:bug 61477 .根据该错误报告,由于向后兼容性问题,它不太可能被更改。

如果您坚持使用 Connector/NET,您只需手动从序数值中减去一个。否则,您可以切换到 MySqlConnector ,这fixes this bug .

关于c# - MySqlDataReader.GetSchemaTable ColumnOrdinal 是实际数据的+1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com