我的ASP.NET不能調試了,由於只是改一個頁面,覺的不調試也行吧。仔細檢查一下代碼就可以了。
可是今天碰到的問題實在是沒有檢查出來,後來把代碼拷貝到筆記本上調試,單步跟蹤一下就找出問題來了!
Public Function GetInsertSql() As String
Dim strSql As String
strSql = String.Format("Insert Into {0}(inputID,itemID, 數據) values({1},{2},{3});", _TableData, _ReportID, _ItemID, _value)
Return strSql
End Function
Public Function GetInsertSql(ByVal ddl As DropDownList) As String
If ddl.Items.Count = 0 Then
Return GetInsertSql '這裡少了括號,應該是Return GetInsertSql()
'因為在VB.NET中函數名代表要返回的對象,編譯不會出現錯誤。
'如果是直接用GetInsertSql的話是個Nothing
'如果是GetInsertSql()表示調用上面的重載函數GetInsertSql(),這樣才是正確的
'可以這樣理解: 系統隱式的聲明了一個這樣的變量,變量名是函數名,類型是函數的返回類型
End If
Dim strSql As String = ""
Dim V As Double
Dim sel As String = ddl.SelectedValue
For Each item As ListItem In ddl.Items
V = IIf(item.Value = sel, _value, 0)
strSql &= String.Format("Insert Into {0}(inputID,itemID,數據,版種) values({1},{2},{3},'{4}');", _TableData, _ReportID, _ItemID, V, item.Text.Trim())
Next
Return strSql
End Function
真是個很隱蔽的錯誤,以後要注意了,括號自己加上的好(以前都是VB.NET自動加上括號的)
對於這樣的問題,編譯器應該提出警告才對,或者當取消用函數名來代表返回值。
雖然MSDN是這樣讚美的:
將返回值分配給函數名的優點是,直到程序遇到 Exit Function 或 End Function 語句時函數才返回控制。這樣就可以先分配一個初步的值,以後如有必要再進行調整。
|
|