超出SqlDataReader的范围错误

我正在使用SqlDataReader并在尝试读取列时遇到此exception…

System.IndexOutOfRangeException:记录

这是代码……

 SqlCommand select = new SqlCommand("SELECT RTRIM(LTRIM(PART_NO)) AS PART_NO, record AS CUSTOMER_NO FROM [RMAData].[dbo].[IMPORTING_ORDER_EDI] WHERE sessionID = '" + Session.SessionID + "'", connection); SqlDataReader reader = select.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { lblWebMasterMessage.Text += "record " + reader["record"].ToString() + "
"; ...

如果我将lblWebMasterMessage.Text更改为以下它可以正常工作…

 lblWebMasterMessage.Text += "record " + reader["PART_NO"].ToString() + "
";

SQL Server表中记录和PART_NO之间的区别在于’record’是主键而intPART_NOvarchar(100)

麻烦的是,我需要’记录’来识别记录以便以后更新它…

我真的不明白为什么它可以返回一个字段而不是另一个字段?

那是因为你没有名为“record”的字段,你把它别名为“CUSTOMER_NO”,所以将代码更改为:

 lblWebMasterMessage.Text += "record " + reader["CUSTOMER_NO"].ToString() + "
";

也就是说,您也可以使用索引而不是名称来读取第二列:

 lblWebMasterMessage.Text += "record " + reader[1] + "
";

在我的情况下,这个错误是因为我在命令文本中意外地执行了两个select语句。 我有两个单独的输出结果,第一个输出不包含我正在阅读的列名,因此错误。