2008-07-16

Exception has been thrown by the target of an invocation

剛才接獲客戶通報出現以下錯誤信息
Exception has been thrown by the target of an invocation
問了新增所需要填的資料之後,便展開調查,
因為客戶給的填寫資料的發票號碼是空白的,所以我先到DB去查看,當初開發票號碼這個欄位是不是必填,調查結果為非必填,所以就是允許Null值的Insert,嗯~很好~那就是程式的問題囉

找到新增資料的程式語法如下
command.Parameters.Add("$ReInvoiceNum", DbType.String).Value = ReInvoiceNum.ToUpper()

看起來沒有問題,因為發票前2碼英文字是大寫,所以順手就ToUpper了,就是這裡有問題,為什麼呢?從這裡看不出錯誤的,要等到Run Time時才會出錯。

解答:因為發票號碼沒填任何值的情形下,傳到後端時ReInvoiceNum會等於Nothing就出錯囉

我列出二種解決方式,我選擇解法1 ^_^
解法1:在網頁端加入
Protected Sub FormView1_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewInsertEventArgs) Handles FormView1.ItemInserting
e.Values("ReInvoiceNum") = e.Values("ReInvoiceNum").ToString.ToUpper()
End Sub
在後端的新增語法改為
command.Parameters.Add("$ReInvoiceNum", DbType.String).Value = ReInvoiceNum

解法2:在後端新增語法改為
If ReInvoiceNum IsNot Nothing Then
command.Parameters.Add("$ReInvoiceNum", DbType.String).Value = ReInvoiceNum.ToUpper()
Else
command.Parameters.Add("$ReInvoiceNum", DbType.String).Value = Nothing
End If

Case Close

0 comments: