超出SqlDataReader的范围错误

Stu*_*art 3 c# asp.net sqldatareader

我正在使用a 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 />";
...
Run Code Online (Sandbox Code Playgroud)

如果我更改lblWebMasterMessage.Text为以下它工作得很好......

lblWebMasterMessage.Text += "record " + reader["PART_NO"].ToString() + "<br />";
Run Code Online (Sandbox Code Playgroud)

记录与PART_NOSQL Server表之间的区别在于'record'是主键int,PART_NO而a是varchar(100).

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

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

Sha*_*ard 10

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

lblWebMasterMessage.Text += "record " + reader["CUSTOMER_NO"].ToString() + "<br />";
Run Code Online (Sandbox Code Playgroud)

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

lblWebMasterMessage.Text += "record " + reader[1] + "<br />";
Run Code Online (Sandbox Code Playgroud)

  • 啊......对不起!我没有看到!! 为什么我这样做?!我希望工作中的人能让我独自一人,这样我就能集中注意力,不再因为愚蠢的错误而浪费人们的时间!谢谢!!:) (2认同)