indexOutofRangeException发生

时间:2010-10-12 09:02:02

标签: c# asp.net ado.net

我收到'indexOutofRangeException发生'错误 - 'FixedActual'

这是我正在使用的代码,任何帮助都会被挪用。

SqlDataReader dataReader = null;
SqlCommand Scmd = new SqlCommand("SalesGetRecalcOrderItemCosts", this._connection);
Scmd.CommandType = System.Data.CommandType.StoredProcedure;
Scmd.Transaction = currentTransaction;
Scmd.Parameters.AddWithValue("@OrderNumber", ItemSODBOM.SONO); //SoItem.fSnoNo
Scmd.Parameters.AddWithValue("@UTCompFCostRef", sUTCompFCostRef);//utcomp.fcostref
Scmd.Parameters.AddWithValue("@UTCompFCostEst", sUTCompFCostEst);//utcomp.fcostest
Scmd.Parameters.AddWithValue("@UTCompFCostMType", sUTCompFCostMType);//utcomp.fcostmtype
Scmd.Parameters.AddWithValue("@OrderItemNumber", finumber); //SoItem.finumber
Scmd.Parameters.AddWithValue("@OrderType", "S");//Sales Order
Scmd.Parameters.AddWithValue("@UseStandardTransitCost", "0");
Scmd.Parameters.AddWithValue("@GetExtendedCosts", "0");
dataReader = Scmd.ExecuteReader();
while (dataReader.Read())
{
    using (System.Data.SqlClient.SqlCommand updateCommand = this._connection.CreateCommand())
    {
        string sql = @"
        UPDATE SOITEM SET 
        FFIXACT = @FixedActual, FLABACT = @LaborActual, FMATLACT = @MaterialActual,
        FOTHRACT = @OtherActual, FOVHDACT= @OverheadActual, FRTGSETUPA= @SetupActual,
        FSUBACT = @SubcontractActual, FTOOLACT = @ToolActual,FSTANDPART = 0,
        FTOTPTIME = @TotalPTime, FTOTSTIME = @TotalSTime, FULABCOST1 = @ULaborCost1  
        WHERE FSONO = @FSONO and FINUMBER = @FINUM  
                                        ";
        updateCommand.CommandText = sql;
        updateCommand.CommandType = System.Data.CommandType.Text;
        updateCommand.Transaction = currentTransaction;
        updateCommand.Parameters.AddWithValue("@FixedActual", dataReader["FixedActual"]); //This is where i am getting error
        updateCommand.Parameters.AddWithValue("@LaborActual", dataReader["LaborActual"]);
        updateCommand.Parameters.AddWithValue("@MaterialActual", dataReader["MaterialActual"]);
        updateCommand.Parameters.AddWithValue("@OtherActual", dataReader["OtherActual"]);
        updateCommand.Parameters.AddWithValue("@OverheadActual", dataReader["OverheadActual"]);
        updateCommand.Parameters.AddWithValue("@SetupActual", dataReader["SetupActual"]);
        updateCommand.Parameters.AddWithValue("@SubcontractActual", dataReader["SubcontractActual"]);
        updateCommand.Parameters.AddWithValue("@ToolActual", dataReader["ToolActual"]);
        updateCommand.Parameters.AddWithValue("@TotalPTime", dataReader["TotalPTime"]);
        updateCommand.Parameters.AddWithValue("@TotalSTime", dataReader["TotalSTime"]);
        updateCommand.Parameters.AddWithValue("@ULaborCost1", dataReader["ULaborCost1"]);
        updateCommand.Parameters.AddWithValue("@FSONO", ItemSODBOM.SONO);
        updateCommand.Parameters.AddWithValue("@FINUM", finumber);
        updateCommand.ExecuteNonQuery();
    }

}

1 个答案:

答案 0 :(得分:1)

嗯,异常意味着您的SqlDataReader没有FixedActual列。说实话,这就是我们可以从你所展示的内容中真正分辨出来的。我们不知道您的SalesGetRecalcOrderItemCosts存储过程的作用,但它似乎没有完全按照您的预期返回。

您可能希望查看调试器中的SqlDataReader,并查看 可用的字段。

(顺便说一下,你应该对这些资源使用using语句 - 命令,阅读器等 - 这样你就可以妥善处理所有事情了。还不清楚你为什么要使用完全限定的类型名称在某些地方,但不在其他地方。)