mysql - 检查资金是否充足
问题描述
我目前正在做一个 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
解决方案
Decimal
是用于赚钱的好数据类型。不要使用 vb6 Val()
。你可以得到意想不到的结果。穿上。Option Strict
_ Option Infer
我曾经.TryParse
在txtwithdraw
. 如果返回True
,则将转换后的十进制值放入WithdrawalAmount
.
将您的数据对象保持在使用它们的方法的本地。连接和命令需要关闭和处理。Using...End Using
即使有错误,块也会为我们处理这个问题。
始终使用参数来避免 sql 注入。如果代码正在运行Form1
,请不要namebox
使用Form1
. acctnum
一个名为的字段不是数字而是String
包含名称的字段似乎有点奇怪。您将需要检查数据库的正确数据类型和字段大小。我不得不猜测。
由于您正在检索单条数据,因此您可以使用.ExecuteScalar
which 将为您提供第一行的第一列。
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
推荐阅读
- scala - 使用 PrivateMethodTester 测试 curried 方法
- android - OpenStreetMap Android MapView 在缩放后加载 Tiles
- python - Numpy 将 3d 矩阵乘以 2d 矩阵
- c++ - 多线程应用程序的壁时间分析
- react-native - React-Native 获取示例未呈现
- php - 在php用户身份验证中重定向请求未完成
- angular - 量角器拖放不适用于 chrome
- html - 如果 HTML 表在其行内包含图像,那么我如何最小化图像之间的空白
- git - codeAnyWhere github 命令 git status
- node.js - 汇总后 crypto.createHmac 未定义