2011-01-31 118 views
0

我寫了下面的代碼:這段代碼爲什麼拋出FormatException?

Dim E_ID As Integer 
E_ID = Convert.ToInt16(Request.QueryString("ID")) 

但在執行時,我總是得到一個FormatException

error: Input string was not in a correct format.

可能是什麼造成的?

我正在發送像這樣的值。

Protected Sub lnkPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkPrint.Click 
     lnkPrint.Attributes.Add("onclick", "return openBadgeReportPage('" + ddEvent.DataValueField + "','" + ddType.DataValueField + "')") 
    End Sub 
End Class 
+0

您在Request.QueryString(「ID」)中獲得什麼值?並請粘貼錯誤文本 – 2011-01-31 11:21:47

+0

ddEvent.DataValueField可能是您的數據庫值字段,您確定您不是指ddEvent.SelectedValue? – 2011-01-31 11:52:32

回答

4

因爲任何值正在由Request.QueryString("ID")函數調用返回是無法轉換爲一個Int16類型。據爲Convert.ToInt16 method文件,一個FormatException拋出每當:

value does not consist of an optional sign followed by a sequence of digits (0 through 9).

你可以看到什麼樣的價值是實際上受到了分離您的代碼到幾個不同的線,並設置斷點返回。例如:

Dim E_ID As Integer 
Dim queryString As String 
queryString = Request.QueryString("ID") ' <-- place breakpoint here 
E_ID = Convert.ToInt16(queryString) 
1

有需要,這裏要注意兩件事情:

1)您試圖分配的Int16一個整數(32位默認情況下)。這是一個有效的操作,但是您可能會在應用程序中引入錯誤。

2)科迪提及的Request.QueryString(「ID」的返回值),可以不轉換爲一個的Int16,因此錯誤。您可以嘗試使用以下代碼以更安全的方式驗證Request.QueryString(「ID」)語句返回的值:

Dim E_ID As Int16 
Boolean isInteger = Int16.TryParse(Request.QueryString("ID"), out E_ID) 

If isInteger Then 
    // you have a valid short int inside the E_ID variable now. 
相關問題