2015-04-13 71 views
0

我有一个MySQL数据库设置:VB.NET积分系统

表核算:

ID:1
名称:唐尼
积分:600

我有一个名为购买 按钮点击时运行如下

If credits.Text <= 0 Then 
      MsgBox("Geen credits meer.") 
     Else 

      Dim conn As MySqlConnection 
      conn = New MySqlConnection 
      conn.ConnectionString = "server=xxx;port=3306; user id=xxx; password=xxx; database=xxx" 
      Try 
       conn.Open() 
      Catch myerror As MySqlException 
       MsgBox("error connecting to database") 
      End Try 
      Dim myadapter As New MySqlDataAdapter 

      Dim sqlquery = "UPDATE account SET credits = credits -700 WHERE id='" & Trim(id.Text) & "'" 

      Dim mycommand As New MySqlCommand() 
      mycommand.Connection = conn 
      mycommand.CommandText = sqlquery 
      myadapter.SelectCommand = mycommand 
      mycommand.ExecuteNonQuery() 
      Try 
       conn.Close() 
      Catch myerror As MySqlException 
       MessageBox.Show("Cannot connect to database: " & myerror.Message) 
      Finally 
       conn.Dispose() 
      End Try 

     End If 

例如,我有600学分在我的帐户。我想购买一个价格为700美元的产品。该系统说它不可能,因为你只有600个学分。目前的代码显示-100积分,但是我怎样才能检查并显示错误消息呢?

+0

我建议创建一个存储过程来执行此操作,返回值指示成功或失败。检查可用的信用,并在交易中扣除金额(如果信用额度足够)。 –

+0

我想你应该首先读取可用的信用,然后验证是否足够,如果不是弹出消息,则请继续更新! –

回答

1

您可以只需添加一个功能到您的程序,以检查是否有足够的学分:

Public Function checkCredits(ByVal creditsNeeded As Int32, ByVal id As String) As Boolean 
    Dim conn As New MySqlConnection 
    conn.ConnectionString = "server=xxx;port=3306; user id=xxx; password=xxx; database=xxx" 
    conn.Open() 

    Dim mycommand As New MySqlCommand() 
    With mycommand 
     .Connection = conn 
     .CommandType = CommandType.Text 
     .CommandText = "SELECT credits FROM account WHERE id = @id" 
     .Parameters.Add("@id", MySqlDbType.VarChar).Value = id 
    End With 

    Dim creditsAvailable As Int32 = mycommand.ExecuteScalar 
    conn.Close() 

    If creditsAvailable >= creditsNeeded Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 

然后调整上述代码中使用它:

If credits.Text <= 0 Then 
     MsgBox("Geen credits meer.") 
    Else 
     If checkCredits(700, id.Text) Then 

      Dim conn As MySqlConnection 
      conn = New MySqlConnection 
      conn.ConnectionString = "server=xxx;port=3306; user id=xxx; password=xxx; database=xxx" 
      Try 
       conn.Open() 
      Catch myerror As MySqlException 
       MsgBox("error connecting to database") 
      End Try 
      Dim myadapter As New MySqlDataAdapter 

      Dim sqlquery = "UPDATE account SET credits = credits -700 WHERE id='" & Trim(id.Text) & "'" 

      Dim mycommand As New MySqlCommand() 
      mycommand.Connection = conn 
      mycommand.CommandText = sqlquery 
      myadapter.SelectCommand = mycommand 
      mycommand.ExecuteNonQuery() 
      Try 
       conn.Close() 
      Catch myerror As MySqlException 
       MessageBox.Show("Cannot connect to database: " & myerror.Message) 
      Finally 
       conn.Dispose() 
      End Try 
     Else 
      MessageBox.Show("Not Enough Credits") 
     End If 
    End If