索引超出了数组的范围

时间:2014-03-26 05:24:44

标签: asp.net sql-server subsonic3

当我尝试将超过1个数量的产品添加到订单表中时,我收到此索引超出范围的错误。更清楚的是,当我添加数量为1的产品或每个数量为1的产品时,情况并不相同。 插入代码如下,并在sqlcommand行显示错误。

    SqlCommand command = new SqlCommand("Select Product_id,Product_name,Product_cost,Quantity from Cart where User_id='" + userid + "'",con);
       try
      { 
        con.Open();
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            int a = Convert.ToInt32(reader[0]);
            ar.Add(a);
            String pdname = reader[1].ToString();
            ar1.Add(pdname);
            Int32 pcost = Convert.ToInt32(reader[2]);
            ar2.Add(pcost);
            int q = Convert.ToInt32(reader[3]);
            ar3.Add(q);
        }
        pkid = (int[]) ar.ToArray(typeof(int));
        pkname = (String[]) ar1.ToArray(typeof(String));
        pkcost = (Int32[]) ar2.ToArray(typeof(int));
        pkq = (int[]) ar3.ToArray(typeof(int));
        con.Close();

       }
      catch (Exception ex)
       {
           Response.Write("Error at second" + ex);
       }
    con.Open();

        for (int i = total-1; i>=0; i--)
        {

   error here=:-         SqlCommand smd = new SqlCommand("Insert into Orders values('"+orderid+"','" 
            + userid + "','" + name + "','" + pkid[i] + "','" + pkname[i] + "','" 
            + address + "','" + pkq[i] + "','" + pkcost[i] + "','" + date + "','" 
            + payment.SelectedItem.ToString() + "','Pending')", con);

            smd.ExecuteNonQuery();

        }

        con.Close();

2 个答案:

答案 0 :(得分:0)

首先设置一个断点 pkid = (int[]) ar.ToArray(typeof(int)); pkname = (String[]) ar1.ToArray(typeof(String)); pkcost = (Int32[]) ar2.ToArray(typeof(int)); pkq = (int[]) ar3.ToArray(typeof(int)); 这些行并在观察窗口中查看值。可能是错误必须在其中一行中。

答案 1 :(得分:0)

所以在看了我的代码之后我得到了问题而且它只是一个简单的问题。实际上,for循环中使用的总数是总数量的总和。在这种情况下,因为我说我提交了1个数量= 2的产品。因此For循环试图执行2次,但总记录为1,这导致了问题。我刚刚将总数改为总记录数,现在工作正常。谢谢大家的帮助。