超出SqlDataReader的范围错误

时间:2013-02-21 15:03:20

标签: c# asp.net sqldatareader

我正在使用SqlDataReader并在尝试读取列时遇到此异常...

  

System.IndexOutOfRangeException:record

这是代码......

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表中记录与PART_NO之间的区别在于'记录'是主键而intPART_NOvarchar(100)

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

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

2 个答案:

答案 0 :(得分:10)

那是因为您没有名为“record”的字段,您将其别名为“CUSTOMER_NO”,因此请将代码更改为:

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

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

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

答案 1 :(得分:1)

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