Почему этот код выдает FormatException ?
-
27-10-2019 - |
Вопрос
Я написал следующий код:
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
Решение
Потому что любое значение, возвращаемое Request.QueryString("ID")
вызов функции не преобразуется в Int16
Тип.В соответствии с документацией для Convert.ToInt16
способ, а FormatException
выбрасывается всякий раз, когда:
значение не состоит из необязательного знака, за которым следует последовательность цифр (от 0 до 9).
Вы можете видеть, что такое ценность на самом деле возвращается путем разделения вашего кода на пару разных строк и установки точки останова.Например:
Dim E_ID As Integer
Dim queryString As String
queryString = Request.QueryString("ID") ' <-- place breakpoint here
E_ID = Convert.ToInt16(queryString)
Другие советы
Здесь есть 2 вещи, на которые вы должны обратить внимание:
1) Вы пытаетесь присвоить Int16 целому числу (по умолчанию 32 бита).Это допустимая операция, однако есть вероятность, что вы могли бы внести ошибку в свое приложение.
2) Как упоминал Коди, значение, возвращаемое запросом.QueryString("ID") может не быть конвертируемым в Int16 и, следовательно, ошибка.Вы можете попробовать следующий код для проверки значения, возвращаемого запросом.Оператор 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.