2016-04-23 21 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については不明ですが、整数のようですが、元のクエリでは文字列のように一重引用符で囲みます)

関連する問題