仅当使用别名时SqlDataReader.get_Item()上的System.IndexOutOfRangeException

时间:2017-03-21 14:34:04

标签: c# sql

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

SELECT colName1 AS altColName1, colName2 AS altColName2 FROM table

当我在SQL Server Management Studio中运行查询时,它可以运行并提供预期的结果。

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

SELECT colName1, colName2 FROM table

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

问题是,当使用SqlDataReader并给它第一个查询时,我得到:

System.IndexOutOfRangeException -- colName1

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

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

来使其正常工作

SELECT DISTINCT colName1 AS altColName1, colName2 AS altColName2 FROM table

虽然我不明白为什么这个有效但原来没有。

1 个答案:

答案 0 :(得分:3)

您获得colName1的{​​{1}}因为,使用带有别名的SELECT,正确的名称是altColName1

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

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