WPF窗體中建有一個DataGrid,運行後修改各行數據,通過Update方法更新後臺資料庫。發現在資料庫中,其中一列FAcctID(文本型)每次都會變為0,還有一列FDebit(貨幣型)不能更新,其他列則沒有問題。主要代碼如下: 排查了好幾個小時,對Xaml代碼綁定、Parameter參數進行修改 ...
WPF窗體中建有一個DataGrid,運行後修改各行數據,通過Update方法更新後臺資料庫。發現在資料庫中,其中一列FAcctID(文本型)每次都會變為0,還有一列FDebit(貨幣型)不能更新,其他列則沒有問題。主要代碼如下:
OleDbCommand cmdUpdateAcct = new OleDbCommand(); cmdUpdateAcct.Connection = conAcct; cmdUpdateAcct.CommandText = "Update t_Voucher Set FDate=@FDate, FExp=@FExp, FAcctID=@FAcctID,FDebit=@FDebit, FCredit=@FCredit Where FID=@FID";
排查了好幾個小時,對Xaml代碼綁定、Parameter參數進行修改,均沒有找到問題出在哪裡。最後,註釋掉該行代碼,試著重新寫SQL語句,一個欄位一個欄位地進行測試,卻再沒有出現這個問題。兩行代碼如下:
從代碼編輯器來看,兩行代碼一模一樣。試著比較兩行代碼,提示不一致。最後粘貼到Word中觀察,發現@FAcctID,FDebit=之間的逗號是一個全形逗號,但是在代碼編輯器中全形逗號和半形逗號十分相似,沒有Word中那麼明顯。
最終原因找到,原來是逗號惹的禍。因為FAccID對應的參數本來是【@FAccID】,卻變成了【@FAccID,FDebit=@FDebit】,所以會更新成0;而另一個欄位FDebit在SQL語句中找不到了(被當成了FAcctID的參數),自然就不會更新。
在此記載一下,以提醒自己今後註意。