Why is this code throwing a FormatException?
I have written the following code:
Dim E_ID As Integer
E_ID = Convert.ToInt16(Request.QueryString("ID"))
But when it executes, I always get a FormatException
:
error: Input string was not in a correct format.
What could be causing this?
i am sending value like this.
Protected Sub lnkPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkPrint.Click
lnkPrint.Attributes.Add("onclick", "return openBadgeReportPage('" + ddEvent.D开发者_如何学运维ataValueField + "','" + ddType.DataValueField + "')")
End Sub
End Class
Because whatever value is being returned by the Request.QueryString("ID")
function call is not convertible to an Int16
type. According to the documentation for the Convert.ToInt16
method, a FormatException
is thrown whenever the:
value does not consist of an optional sign followed by a sequence of digits (0 through 9).
You can see what value is actually being returned by separating your code out into a couple of different lines, and setting a breakpoint. For example:
Dim E_ID As Integer
Dim queryString As String
queryString = Request.QueryString("ID") ' <-- place breakpoint here
E_ID = Convert.ToInt16(queryString)
There are 2 things you need to note here:
1) You are trying to assign an Int16 to an Integer (32 bit by default). This is a valid operation, however there is a chance you could introduce a bug in your application.
2) As Cody mentioned the value returned by Request.QueryString("ID") may not be convertible to an Int16 and hence the error. You can try the following code to verify the value returned by the Request.QueryString("ID") statement in a safer way:
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.
精彩评论