2016-04-23 87 views
0

我不知道什么是真正的问题,因为没有错误报告。所以我想要这些代码要做的是将事务记录插入到数据库中,但没有任何内容被返回。下面是与此相关的代码:mysql,vb.net - 保存交易不起作用

的MainForm

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 

Transactionform

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 

回答

0

ExecuteReader执行命令(插入),但它已建成返回SELECT命令提取的行。
调用Read来发现您的INSERT是否成功在这种情况下是没有意义的。

你应该调用ExecuteNonQuery,捕获返回值,如果它不等于零,那么你已经插入了记录。

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 

还要注意,我已经改变你的代码中使用周围像极为重要提示的连接和命令,一次性的对象适当的使用声明,我已经改变了您的查询使用更安全的参数化查询方式(不知道关于ID参数的MySqlDbType,它似乎是一个整数,但在你原来的查询中,你把它放在单引号之间,比如一个字符串)