我有一个使用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
,该调用将不起作用。