2013-02-18 64 views
-3

我已經創建了一個名爲Cls_ICCID的類,我在Update_Status中聲明瞭方法,它返回一個byRef變量。如何在vb.net中聲明方法返回值


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 

但是這給了我異常:

Arithme抽象操作導致溢出。 enter image description here 我在做什麼錯?

+2

錯誤消息與您發佈的代碼完全無關。此外,這個代碼很奇怪,要禮貌地說出來。 – 2013-02-18 11:01:12

+1

我該怎麼辦?你對我的建議嗎? – 2013-02-18 11:03:35

+0

我想如果與數據庫操作斷開連接,在我的頁面放入lblerror,寫了「服務器錯誤」,但我不知道如何在方法中聲明返回值 – 2013-02-18 11:06:35

回答

1

說實話,正如konrad說,如果你想使用這種類型的代碼,你應該真的在基礎上工作。

沒有嘗試過的代碼,但我想你想的東西像

Public Function Update_Status(iccidNo As Integer, status As Integer) As String 
    Const sql As String = "UPDATE Tbl_ICCID SET [email protected] WHERE [email protected]" 
    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 

但我個人會處理異常沒有一點辦法,並返回一個布爾值。

+0

謝謝你的回答,但讓我異常,但!!!! – 2013-02-18 11:28:32

+0

你得到了什麼異常? – Belial09 2013-02-18 11:30:13

+0

我編輯我的問題。我把一個圖像 – 2013-02-18 11:33:07

0

我應該使用Function而不是子方法。因爲子方法是無效的。

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) 
+0

謝謝你的答案,但讓我例外,但!!!! – 2013-02-18 11:27:35

+0

@SaharKiyan也許'Txt_ICCID.Text'不是一個數字。可能錯誤就是這樣。無論如何,您應該先將其轉換爲數字。 – SysDragon 2013-02-18 11:53:32

+0

是的,我改變ICCID_No類型的字符串,並在clsICCID.Update_Status(Txt_ICCID.Text.tostring(),1)!但給我例外:「對象引用未設置爲對象的實例。」 – 2013-02-18 12:03:42

0

對於一個方法返回需要聲明的方法的價值作爲一個功能,而不是子。 例如:

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

但它也似乎你的參數可能不匹配:發送一個String作爲一個整數?

+0

當到達「returnValue = Update_Status(Txt_ICCID.Text,1)」時,跳轉到例外 – 2013-02-18 11:39:00

+0

如果Txt_ICCID.Text是一個字符串,則不應將其作爲輸入發送到Integer參數。 – 2013-02-18 11:55:08

+0

是的,我改變ICCID_No類型爲字符串,並在clsICCID.Update_Status(Txt_ICCID.Text.tostring(),1)!但給我例外:「對象引用未設置爲對象的實例。」 – 2013-02-18 12:04:38