2010-10-12 58 views
1

我得到“indexOutofRangeException发生”错误 - “FixedActual”indexOutofRangeException发生

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

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

需要更多的信息。哪一行是发生的异常?你有什么试图解决它?出于好奇, – thecoop 2010-10-12 09:05:24

+0

,你想在这里做什么?您正在执行SPROC,读取结果,然后将这些结果传递给UPDATE命令?为什么要做2次往返?为什么不直接在SPROC中进行更新?关于错误,您是否调试过SPROC的结果?数据读取器中是否存在“FixedActual”? – RPM1984 2010-10-12 09:06:13

+0

你确定你的存储过程返回一个FixedActual字段吗? – 2010-10-12 09:07:14

回答

1

好,异常意味着你SqlDataReader没有一个FixedActual列。说实话,我们可以从你所展示的内容中真正了解到这一点。我们不知道你的存储过程是干什么的,但它看起来没有完全返回你期望的结果。

您可能想在调试器中查看SqlDataReader并查看可用的字段。 (另外,你应该使用using这些资源的命令 - 命令,阅读器等 - 这样你就可以正确地处理所有的东西了,也不清楚为什么你在某些地方使用完全限定的类型名称而不是其他。)

+0

你是对的,谢谢 – Pradeep 2010-10-12 09:23:44

+3

@Downvoters:小心点评? – 2011-11-06 08:03:48

相关问题