2010-10-12 50 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

相關問題