我有一个使用SqlDataReader创建并通过C#代码运行的sql查询。查询非常简单,总计为:

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

尽管我不完全了解为什么这样做,而原始版本却没有。

最佳答案

您为System.IndexOutOfRangeException获得colName1,因为将SELECT与别名一起使用时,要使用的正确名称是altColName1

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

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

08-03 16:59