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
È stato utile?

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top