なぜこのコードが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")
関数呼び出しは、anに変換できません Int16
タイプ。のドキュメントによると Convert.ToInt16
方法, 、a 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)Codyが言及したように、Request.QueryString( "ID")によって返された値は、INT16に変換されないため、エラーに変換できない場合があります。次のコードを試して、要求によって返された値を確認できます。
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.
所属していません StackOverflow