0

私は次のコードを書きました:

 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
4

2 に答える 2

4

関数呼び出しによって返される値はRequest.QueryString("ID")、型に変換できないためInt16です。Convert.ToInt16メソッドのドキュメントによると、 aFormatExceptionは次の場合にスローされます。

value は、一連の数字 (0 ~ 9) が後に続くオプションの記号で構成されていません。

コードをいくつかの異なる行に分割し、ブレークポイントを設定することで、実際に返される値を確認できます。例えば:

Dim E_ID As Integer
Dim queryString As String
queryString = Request.QueryString("ID")    ' <-- place breakpoint here
E_ID = Convert.ToInt16(queryString)
于 2011-01-31T11:24:41.273 に答える
1

ここで注意すべき点が 2 つあります。

1) Int16 を Integer (デフォルトでは 32 ビット) に割り当てようとしています。これは有効な操作ですが、アプリケーションにバグが発生する可能性があります。

2) Cody が述べたように、Request.QueryString("ID") によって返される値は Int16 に変換できないため、エラーが発生する可能性があります。次のコードを試して、Request.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.
于 2011-01-31T11:36:35.733 に答える