我收到'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();
}
}
答案 0 :(得分:1)
嗯,异常意味着您的SqlDataReader
没有FixedActual
列。说实话,这就是我们可以从你所展示的内容中真正分辨出来的。我们不知道您的SalesGetRecalcOrderItemCosts
存储过程的作用,但它似乎没有完全按照您的预期返回。
您可能希望查看调试器中的SqlDataReader
,并查看 可用的字段。
(顺便说一下,你应该对这些资源使用using
语句 - 命令,阅读器等 - 这样你就可以妥善处理所有事情了。还不清楚你为什么要使用完全限定的类型名称在某些地方,但不在其他地方。)