2016-04-23 4 views
0

Ich weiß nicht, was das eigentliche Problem ist, da kein Fehler gemeldet wird. Ich möchte, dass diese Codes einen Transaktionsdatensatz in die Datenbank einfügen, aber nichts wird zurückgegeben. Hier sind die Codes, die im Zusammenhang mit dieser:mysql, vb.net - Speichern der Transaktion funktioniert nicht

Main

Private Sub PayButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PayButton.Click 
     Dim payment As New Payment 
     payment.Show() 
     AddHandler payment.PaymentEvent, AddressOf paymentSuccess 
     payment.PaymentAmount = TransactionTotal 
    End Sub 

Public Sub paymentSuccess(ByVal sender As Object, ByVal e As Payment.PaymentMadeEventArgs) 
      mydbcon = New MySqlConnection 
      mydbcon.ConnectionString = "server=localhost;userid=root;password=;database=sdudb" 
      Dim reader As MySqlDataReader 
      Try 
       mydbcon.Open() 
       Dim Query As String 
       Query = "select * from inventory" 
       COMMAND = New MySqlCommand(Query, mydbcon) 
       reader = COMMAND.ExecuteReader() 
       While reader.Read 
        Dim itId As Integer = reader.GetString("itemid") 
        Dim itName As String = reader.GetString("itemname") 
        If e.PaymentSuccess = True Then 
         paymentSuccessQuery(itId, itName) 
        End If 
       End While 
       reader.Close() 
       mydbcon.Close() 
      Catch ex As Exception 
       MessageBox.Show(ex.Message) 
      End Try 
     End Sub 
Private Sub paymentSuccessQuery(ByVal itemid, ByVal itemname) 
     mydbcon = New MySqlConnection 
     mydbcon.ConnectionString = "server=localhost;userid=root;password=;database=sdudb" 
     Dim reader As MySqlDataReader 
     Try 
      mydbcon.Open() 
      Dim Query As String 
      Query = "INSERT INTO transaction (itemid, itemname) VALUES('" & itemid & "', '" & itemname & "')" 
      COMMAND = New MySqlCommand(Query, mydbcon) 
      reader = COMMAND.ExecuteReader() 
      If reader.Read Then 
       MessageBox.Show("Unable to save transaction!") 
      Else 
       MessageBox.Show("Transaction Saved!") 
      End If 
      reader.Close() 
      mydbcon.Close() 
     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
     End Try 
    End Sub 

Transaction

Public Class Payment 
    Public Delegate Sub PaymentMadeEvent(ByVal sender As Object, ByVal e As PaymentMadeEventArgs) 
    Public Event PaymentEvent As PaymentMadeEvent 

    Private _paymentAmount As Decimal 
    Public Property PaymentAmount As Decimal 
     Get 
      Return _paymentAmount 
     End Get 
     Set(ByVal value As Decimal) 
      _paymentAmount = value 
      AmountBox.Text = String.Format("{0:c}", _paymentAmount) 
     End Set 
    End Property 

    Private Sub PayButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PayButton.Click 
     Dim total As Decimal = 0 

     Try 
      total = Decimal.Parse(AmountBox.Text.TrimStart("₱")) - Decimal.Parse(PaymentBox.Text) 
     Catch 
      MessageBox.Show("Error Occured, please enter a valid amount!") 
      Return 
     End Try 

     If (total > 0) Then 
      AmountBox.Text = total.ToString() 
     Else 
      MessageBox.Show("Please give " + String.Format("{0:c}", -total)) 
      RaiseEvent PaymentEvent(Me, New PaymentMadeEventArgs() With {.PaymentSuccess = True}) 
     End If 

    End Sub 

    Public Class PaymentMadeEventArgs 
     Inherits EventArgs 
     Private _paymentSuccess As Boolean 
     Public Property PaymentSuccess As Boolean 
      Get 
       Return _paymentSuccess 
      End Get 
      Set(ByVal value As Boolean) 
       _paymentSuccess = value 
      End Set 
     End Property 
    End Class 
End Class 

Antwort

0

ExecuteReader führt den Befehl (der Einsatz), aber es wurde gebaut durch ein SELECT-Befehl die Zeilen extrahiert zurückzukehren.
Aufruf Read, um festzustellen, ob Ihre INSERT erfolgreich war, ist in diesem Zusammenhang bedeutungslos.

Sie sollten ExecuteNonQuery aufrufen, fangen Sie den Rückgabewert, und wenn es nicht gleich Null ist, dann haben Sie den Datensatz eingefügt.

Private Sub paymentSuccessQuery(ByVal itemid, ByVal itemname) 
    Using mydbcon = New MySqlConnection("server=localhost;userid=root;password=;database=sdudb" 
    Try 
     mydbcon.Open() 
     Dim Query As String 
     Query = "INSERT INTO transaction (itemid, itemname) " & _ 
       "VALUES(@id, @name)" 
     Using COMMAND = New MySqlCommand(Query, mydbcon) 
      COMMAND.Parameters.Add("@id", MySqlDbType.VarChar).Value = itemid 
      COMMAND.Parameters.Add("@name", MySqlDbType.VarChar).Value = itemname 
      Dim rowsAdded = COMMAND.ExecuteNonQuery() 
      if rowsAdded = 0 Then 
       MessageBox.Show("Unable to save transaction!") 
      Else 
       MessageBox.Show("Transaction Saved!") 
      End If 
     End Using 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
    End Using 
End Sub 

Beachten Sie auch den ich Ihren Code geändert habe unter Verwendung die entsprechende Anweisung um die Einweg-Objekte wie die Verbindung verwendet werden und den Befehl und von größten importante, ich habe Ihre Anfrage zu nutzen, um einen sicheren parametrisierte Abfrage Ansatz geändert (Ich bin nicht sicher über die MySqlDbType für den ID-Parameter, es scheint eine Ganzzahl zu sein, aber in Ihrer ursprünglichen Abfrage, die Sie zwischen einfachen Anführungszeichen wie eine Zeichenfolge setzen)

Verwandte Themen