SqlDataReader上出现超出范围的错误

本文关键字:错误 范围 SqlDataReader | 更新日期: 2023-09-27 18:00:21

我正在使用SqlDataReader,并且在尝试读取列时出现此异常。。。

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() + "<br />";
...

如果我将lblWebMasterMessage.Text更改为以下内容,它就可以正常工作。。。

lblWebMasterMessage.Text += "record " + reader["PART_NO"].ToString() + "<br />";

SQL Server表中的record和PART_NO的区别在于,"record"是主键,而intPART_NOvarchar(100)

问题是,我需要"记录"来识别记录,以便稍后更新。。。

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

SqlDataReader上出现超出范围的错误

这是因为您没有名为"record"的字段,您将其别名为"CUSTOMER_no",所以将代码更改为:

lblWebMasterMessage.Text += "record " + reader["CUSTOMER_NO"].ToString() + "<br />";

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

lblWebMasterMessage.Text += "record " + reader[1] + "<br />";

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