c# - 仅当使用别名时 SqlDataReader.get_Item() 出现 System.IndexOutOfRangeException

标签 c# sql

我有一个正在创建并使用 SqlDataReader 通过 C# 代码运行的 sql 查询。查询非常简单,相当于:

从表中选择 colName1 作为 altColName1,colName2 作为 altColName2

当我在 SQL Server Management Studio 中运行查询时,它可以正常工作并给出预期的结果。

此外,当我运行更简单的查询时:

SELECT colName1, colName2 FROM table

使用 SqlDataReader 它工作正常,除了显然我没有得到别名。

问题是,当使用 SqlDataReader 并为其提供第一个查询时,我得到:

System.IndexOutOfRangeException -- colName1

我很困惑,因为很明显索引在没有附加别名的情况下工作正常。难道我做错了什么?或者我可以使用一些解决方法来使查询与别名一起使用吗?

编辑: 我通过将查询更改为:

使其正常工作

SELECT DISTINCT colName1 AS altColName1, colName2 AS altColName2 FROM table

虽然我不明白为什么这行得通而原来的行不通。

最佳答案

您为 colName1 获得了 System.IndexOutOfRangeException,因为使用带别名的 SELECT,正确的名称是 altColName1.

因此您必须坚持使用列名或更改 SqlDataReader.get_Item() 中的代码。

SqlDataReader.Item property 在给定列名的情况下以其 native 格式获取指定列的值。因此,在您的代码中,如果您将列重命名为 altColName1,您可能会发现类似 yourSqlDataReader("colName1") 的调用。

关于c# - 仅当使用别名时 SqlDataReader.get_Item() 出现 System.IndexOutOfRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42930102/

相关文章:

MySQL:在一行中选择多条记录

sql - 使用 GROUP BY 日期时缺少日期

c# 是否可以创建这样的委托(delegate)?

c# - 星期几的 DateTimeFormatInfo 字符串格式。周四变成 Th

c# - 使用 C# 进行 JSON 反序列化的问题

sql - 如何在 Oracle SQL Developer 19.4.0 中格式化货币?

c# - EF代码先FLUENT : many to many with additional field in jointable

c# - 了解 DependencyProperty 的工作原理和实现方式

SQL 局部最小值和最大值

c# - 甲骨文 SQL : Selecting a single row with the latest date between multiple columns