2015-10-07 2 views
0

Когда я вызываю метод setText, он ничего не возвращает.ввод данных из базы данных в label.text

setText("Sprite", "lblSpriteQty.Text", "lblSpriteTP.Text", 15) 

код я использую для метода SetText

Public Sub setText(ByVal productname As String, ByVal qty As String, ByVal tp As String, ByVal price As Integer) 

    Using cs As New SqlConnection("Data Source=KARL-PC;Initial Catalog=ShawarmaToldb;Integrated Security=True") 
     Using cmd As New SqlCommand("SELECT SUM(quantity) FROM [tblOrderDetails] WHERE productid = (SELECT productid FROM [tblProduct] WHERE productname = @productname)", cs) 
      cmd.Parameters.AddWithValue("@productname", productname) 
      cmd.CommandType = CommandType.Text 
      cs.Open() 
      cmd.ExecuteNonQuery() 
      Dim dr As SqlDataReader = cmd.ExecuteReader() 
      While dr.Read() 
       If IsDBNull(dr.GetValue(0)) Then 
        qty = "0" 'but if i put lblSpriteQty.Text instead of qty it's working 
        tp = "0" 'same as here 
       Else 
        qty = dr.GetValue(0).ToString 
        tp = dr.GetValue(0).ToString * price 
       End If 
      End While 
     End Using 
    End Using 
End Sub 
+1

Строки являются неизменяемыми, вы изменяете локальную переменную вместо возвращения Qty и т.п вызывающему абоненту , Вместо этого либо задайте текст в этом методе, либо сделайте его 'Function', который возвращает' Integer' для количества. –

+1

Метод setText не имеет типа возврата. – Rakesh

+1

Вы непосредственно присваиваете текст ярлыку внутри цикла while, почему он работает – Rakesh

ответ

1

Вы изменяете локальные переменные (аргументы методы) вместо возвращения qty и tp вызывающего метод. Но даже если вы сделали их ByRef, вы не могли их изменить, так как строки неизменяемы. Вместо этого либо установите текст в этом методе, либо сделайте его Function, который возвращает Integer для количества, которое вам нужно.

Public Function GetSumQuantity(ByVal productname As String) As Integer 
    Using cs As New SqlConnection("Data Source=KARL-PC;Initial Catalog=ShawarmaToldb;Integrated Security=True") 
     Using cmd As New SqlCommand("SELECT SUM(quantity) FROM [tblOrderDetails] WHERE productid = (SELECT productid FROM [tblProduct] WHERE productname = @productname)", cs) 
      cmd.Parameters.AddWithValue("@productname", productname) 
      cs.Open() 
      Dim sumQuantityObj = cmd.ExecuteScalar() 
      If DbNull.Value = sumQuantityObj Then Return 0 
      Return DirectCast(sumQuantityObj, Integer) 
     End Using 
    End Using 
End Sub 

Теперь вы можете вычислить значение и присвоить его текст ярлыка в вызывающем методе:

Dim sumQuantity As Integer = GetSumQuantity("IPhone") 
Dim tp = price * sumQuantity 
lblSpriteQty.Text = tp.ToString() 
Смежные вопросы