小弟寫了一個產線人員績效計算的網站,目前正在編寫月總表的部份。
用的是.Net 4.0 C# 2010express
因為實務需要,所以小弟在月總表的部份許可會計去編修備論與績效獎金以便彈性運用。
在開發環境中設定Grid 可以編輯後,實際測試去更新資料欄會出現:
多重步驟 OLE DB 操作發生錯誤。請檢查每一個可用的 OLE DB 狀態值。尚未完成任何操作。
找了一些資料都說是資料型別、長度的問題,於是小弟手動修改了一下:
SelectCommand="SELECT id,workingDays,presAVG,presBonus,Notes FROM [RptPR01] WHERE ((year([theMonth]) = year(?)) AND (Month([theMonth]) = month(?))) "
UpdateCommand="UPDATE [RptPR01] SET [workingDays] = ?, [presAVG] = ?, [presBonus] = ?, [notes] = ? WHERE [id] = ? "
<UpdateParameters>
<asp:Parameter Name="workingDays" Type="Double" />
<asp:Parameter Name="presAVG" Type="Double" />
<asp:Parameter Name="presBonus" Type="Int32" />
<asp:Parameter Name="notes" Type="String" />
<asp:Parameter Name="original_id" Type="Int64" />
</UpdateParameters>
想說先縮減範圍看看是那邊的值出錯,但如上的設定還是會出現一樣的訊息,其中:
堆疊追蹤:
[OleDbException (0x80040e21): 多重步驟 OLE DB 操作發生錯誤。請檢查每一個可用的OLE DB 狀態值。尚未完成任何操作。]
[InvalidOperationException: 命令參數[5] '' 無效。]
各欄位的資料型別如下:
id: bigint
workingDays:float (因為是用工時/8,所以會有小數的情況發生)
presAvg:float 平均的績效點數,用來給會計調整的
presBonus:int 最終發放的績效獎金,實際的基準。
notes:varchar(100) 備註。
會許可更新的就是上面除了id 之外的四列,其餘的都不會讓會計去編輯。所以在測試時縮減到只有那幾列而已。
如果手動把updateCommand中的? 改成數據、文字的話,都可以成功更新。
所以猜想應該還是參數的問題吧??
想請教一下這個問題該怎麼解決或是如何除錯呢?
目前所有的資料來源都是同一個TABLE。
謝謝各位前輩的指導。