首页 > 解决方案 > 检查资金是否充足

问题描述

我目前正在做一个 ATM 管理系统,我希望我的程序检查输入的金额是否不超过数据库中帐户的余额。这是我的代码:

Dim w As Double
w = Val(txtwithdraw.Text)

adapter = New MySql.Data.MySqlClient.MySqlDataAdapter("SELECT `balance` FROM `jaagbank` WHERE 
       acctnum = '" & Form1.namebox.Text & "'", con)
dtable.Clear()
adapter.Fill(dtable)

If w > dtable.Rows.Count Then
    MsgBox("Insufficient Balance")
    txtwithdraw.Clear()
    Return
End If

标签: mysqlvb.net

解决方案


Decimal是用于赚钱的好数据类型。不要使用 vb6 Val()。你可以得到意想不到的结果。穿上。Option Strict_ Option Infer我曾经.TryParsetxtwithdraw. 如果返回True,则将转换后的十进制值放入WithdrawalAmount.

将您的数据对象保持在使用它们的方法的本地。连接和命令需要关闭和处理。Using...End Using即使有错误,块也会为我们处理这个问题。

始终使用参数来避免 sql 注入。如果代码正在运行Form1,请不要namebox使用Form1. acctnum一个名为的字段不是数字而是String包含名称的字段似乎有点奇怪。您将需要检查数据库的正确数据类型和字段大小。我不得不猜测。

由于您正在检索单条数据,因此您可以使用.ExecuteScalarwhich 将为您提供第一行的第一列。

Private Sub OPCode()
    Dim WithdrawalAmount As Decimal
    If Not Decimal.TryParse(txtwithdraw.Text, WithdrawalAmount) Then
        MessageBox.Show("Please enter a valid withdrawal amount.")
        Return
    End If
    Dim Balance As Object
    Using con As New MySqlConnection(ConStr),
        cmd As New MySqlCommand("SELECT `balance` FROM `jaagbank` WHERE acctnum = @Name;", con)
        cmd.Parameters.Add("@Name", MySqlDbType.VarChar, 100).Value = Form1.namebox.Text
        con.Open()
        Balance = cmd.ExecuteScalar
    End Using

    If Balance Is Nothing Then
        MessageBox.Show("Account not recognized.")
        Return
    End If
    If WithdrawalAmount > CDec(Balance) Then
        MsgBox("Insufficient Balance")
        txtwithdraw.Clear()
        Return
    End If
End Sub

推荐阅读