为什么这段代码抛出FormatException?

时间:2011-01-31 11:19:41

标签: .net vb.net formatexception

我写了以下代码:

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

但是当它执行时,我总是得到FormatException

  

错误:输入字符串的格式不正确。

导致这种情况的原因是什么?

我正在发送这样的价值。

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

2 个答案:

答案 0 :(得分:4)

因为Request.QueryString("ID")函数调用返回的值不能转换为Int16类型。根据{{​​3}}的文档,只要:

,就会抛出Convert.ToInt16 method
  

值不包含可选符号后跟一系列数字(0到9)。

您可以通过将代码分成几行并设置断点来查看返回实际的值。例如:

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

答案 1 :(得分:1)

这里有两件事需要注意:

1)您正在尝试将Int16分配给整数(默认为32位)。这是一个有效的操作,但是您可能会在应用程序中引入错误。

2)正如Cody提到的,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.