2011-01-31 120 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. 
相关问题