質問

次のコードを書きました。

 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.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top