我尝试使用序数值来从MySqlDataReader的每一行中提取数据,而不是使用字符串查找。为此,我使用了阅读器提供的GetSchemaTable来获得一个数据表,以便循环填充一个字典,该字典使用列名作为键,序号作为值。但是,数据表中的值是阅读器中列的实际位置的+1。
示例:我有一条sql语句,它返回具有以下模式的记录-
EventID, StreamUrl, CreatedStamp, ModifiedStampMySqlDataReader中的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完全相同的代码,还没有见过这种情况。为什么模式表的序数值和读取器的实际序数值之间会有不匹配呢?
编辑:来自NuGet .Net版本的MySQLConnector版本- 8.0.11 - 4.6.1
https://stackoverflow.com/questions/51253130
复制相似问题