【问题标题】:how to declare method return value in vb.net如何在 vb.net 中声明方法返回值
【发布时间】:2013-02-02 18:53:50
【问题描述】:

我创建了一个名为 Cls_ICCID 的类,我在 Update_Status 中声明了返回 byRef 变量的方法。


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

但这给了我一个例外:

算术运算导致溢出。 我做错了什么?

【问题讨论】:

  • 错误信息与您发布的代码完全无关。此外,礼貌地说,这段代码很奇怪。
  • 我该怎么做?你对我有什么建议吗?
  • 我想如果与数据库的操作断开连接,在我的页面中放入的 lblerror 中,写了“服务器错误”,但我不知道如何在方法中声明返回值
  • 更改您的项目属性并设置 OPTION STRICT ON 并检查结果。

标签: vb.net methods return return-value


【解决方案1】:

老实说,正如 konrad 所说,如果您想使用此类代码,您应该真正学习基础知识。

还没有尝试过代码,但我认为你想要类似的东西

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

但我个人不会那样处理异常并返回布尔值。

【讨论】:

  • 我不认为我的函数会抛出异常。在那里中断异常,调试器会停在那里吗?也许你再贴一些代码(图中异常背后的代码)
  • 当到达 "returnValue = Update_Status(Txt_ICCID.Text, 1)" 时,跳转到异常
  • @SaharKiyan:Txt_ICCID.Text 包含哪些数据?尝试将其转换为整数,如 returnValue = Update_Status(Convert.ToInt32(Txt_ICCID.Text), 1)
【解决方案2】:

您特别要求的是在方法中返回值。而不是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)

【讨论】:

  • @SaharKiyan 也许Txt_ICCID.Text 不是一个数字。可能错误是这样来的。无论如何,您应该先将其转换为数字。
  • 是的,我将 ICCID_No 的类型更改为字符串,并在 clsICCID.Update_Status(Txt_ICCID.Text.tostring(), 1) 中!但给我一个例外:“对象引用未设置为对象的实例。”
  • @SaharKiyan 没有必要在.ToString 中使用Txt_ICCID.Text,因为它已经是一个字符串。检查控件Txt_ICCID或发布相关代码以便我们为您提供帮助。错误在那边。
【解决方案3】:

我应该使用 from Function 而不是 sub 方法。因为子方法是无效的。

【讨论】:

    【解决方案4】:

    对于返回值的方法,您需要将方法声明为函数,而不是 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

    但您的参数似乎也可能不匹配:将字符串作为整数发送?

    【讨论】:

    • 当到达 "returnValue = Update_Status(Txt_ICCID.Text, 1)" 时,跳转到异常
    • 如果 Txt_ICCID.Text 是字符串,则不应将其作为输入发送到 Integer 参数。
    • 是的,我将 ICCID_No 的类型更改为字符串,并在 clsICCID.Update_Status(Txt_ICCID.Text.tostring(), 1) 中!但给我一个例外:“对象引用未设置为对象的实例。”
    • 可能 Txt_ICCID 或 Txt_ICCID.Text 为空。在调试器中设置断点并检查它们的值。
    • 感谢您花时间回答我的问题。我提高了您的声誉,但降低了它
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多