Perché questo codice sta lanciando una formatexception?
-
27-10-2019 - |
Domanda
Ho scritto il seguente codice:
Dim E_ID As Integer
E_ID = Convert.ToInt16(Request.QueryString("ID"))
Ma quando esegue, ottengo sempre un FormatException
:
Errore: la stringa di input non era in un formato corretto.
Che cosa potrebbe causare questo?
Sto inviando valore come questo.
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
Soluzione
Perché qualunque valore venga restituito dal Request.QueryString("ID")
La chiamata di funzione non è convertibile in un Int16
genere. Secondo la documentazione per il Convert.ToInt16
metodo, un FormatException
viene lanciato ogni volta che il:
Il valore non consiste in un segno opzionale seguito da una sequenza di cifre (da 0 a 9).
Puoi vedere cos'è il valore in realtà Essere restituiti separando il codice in un paio di righe diverse e impostando un punto di interruzione. Per esempio:
Dim E_ID As Integer
Dim queryString As String
queryString = Request.QueryString("ID") ' <-- place breakpoint here
E_ID = Convert.ToInt16(queryString)
Altri suggerimenti
Ci sono 2 cose che devi notare qui:
1) Stai cercando di assegnare un INT16 a un numero intero (32 bit per impostazione predefinita). Questa è un'operazione valida, tuttavia c'è la possibilità che tu possa introdurre un bug nella tua applicazione.
2) Come menzionato Cody, il valore restituito su richiesta.Querystring ("ID") potrebbe non essere convertibile in un INT16 e quindi l'errore. È possibile provare il seguente codice per verificare il valore restituito dalla richiesta di richiesta.
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.