-3

byRef 変数を返すCls_ICCIDメソッドを宣言するという名前のクラスを作成しました。Update_Status


Cls_ICCID

Public Sub Update_Status(**ByRef massege As String**, ByVal ICCID_No As Integer, ByVal status As Integer)
        Try
            Dim cmd As SqlCommand
            Dim sql As String
            Dim myConnection As SqlConnection = New SqlConnection()
            myConnection.ConnectionString = "Data Source=TEHRANI\TEHRANI;Initial Catalog=GSMProduction;Persist Security Info=True;User ID=sa;Password=1"
            sql = "UPDATE Tbl_ICCID SET Status=status WHERE ICCID=ICCIDNo"
            myConnection = New SqlConnection(sql)
            myConnection.Open()
            cmd = New SqlCommand(sql, myConnection)
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            myConnection.Close()
            massege = "SeccessFully"
        Catch ex As Exception
            massege = "server Error"
        End Try
    End Sub

そして、テキストボックスの変更イベントがトリガーされたときにそのメソッドを実行します。

 Private Sub Txt_ICCID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txt_ICCID.TextChanged
     Dim clsICCID As Cls_ICCID
     clsICCID.Update_Status(lblError.Text, Txt_ICCID.Text, 1)
 End Sub

しかし、これは私に例外を与えます:

算術演算でオーバーフローが発生しました。 ここに画像の説明を入力 私は何を間違っていますか?

4

4 に答える 4

1

正直なところ、コンラッドが言ったように、そのような種類のコードを使用したい場合は、基本に取り組む必要があります。

コードを試していませんが、次のようなものが必要だと思います

Public Function Update_Status(iccidNo As Integer, status As Integer) As String
    Const sql As String = "UPDATE Tbl_ICCID SET Status=@status WHERE ICCID=@ICCIDNo"
    Const connstr As String = "Data Source=TEHRANI\TEHRANI;Initial Catalog=GSMProduction;Persist Security Info=True;User ID=sa;Password=1"
    Try
        Using myConnection = New SqlConnection()
            myConnection.ConnectionString = connstr
            Using cmd = New SqlCommand(sql, myConnection)
                cmd.Parameters.AddWithValue("@status", status)
                cmd.Parameters.AddWithValue("@ICCIDNo", iccidNo)
                cmd.ExecuteNonQuery()
                Update_Status = "Successfully"
            End Using
        End Using
    Catch ex As SqlException
        Update_Status = "server Error"
    Catch ex As Exception
        Update_Status = "server Error"
    End Try
End Function

しかし、個人的には例外をそのように処理せず、ブール値を返します。

于 2013-02-18T11:13:20.357 に答える
1

具体的に質問するのは、メソッドで値を返すことです。代わりに、次のSubように宣言してからFunction、次の値を返す必要がありreturnます。

Public Function Update_Status(ICCID_No As Integer, status As Integer) As String
    '...

    return massege
End Function

そして、値をキャッチします:

lblError.Text = clsICCID.Update_Status(Txt_ICCID.Text, 1)
于 2013-02-18T11:14:04.140 に答える
0

サブメソッドの代わりに関数から使用する必要があります。サブメソッドが無効であるためです。

于 2013-02-18T11:13:14.793 に答える
0

メソッドが値を返すには、メソッドを sub ではなく関数として宣言する必要があります。例えば:

Public Function Update_Status(ByVal ICCID_No As Integer, ByVal status As Integer) As String
    Return "errorMessage"
End Function

そして、次のように呼び出すことができます:

returnValue = Update_Status(Txt_ICCID.Text, 1)

参照: http://msdn.microsoft.com/en-us/library/sect4ck6%28v=vs.80%29.aspx

しかし、パラメータが一致しない可能性もあるようです.文字列を整数として送信しますか?

于 2013-02-18T11:18:11.060 に答える