C# 更新数据库错误
本文关键字:错误 数据库 更新 | 更新日期: 2023-09-27 18:28:19
try
{
sqlCommandWithdraw.Connection.Open();
sqlCommandWithdraw.Parameters["@cardNumber"].Value = Class1.cardNumber;
readdata = sqlCommandWithdraw.ExecuteReader();
while (readdata.Read())
{
balanceDB = decimal.Parse(readdata["balance"].ToString());
}
decimal withdrawAmm = Convert.ToDecimal(textWithdraw.Text);
balanceDB = balanceDB - withdrawAmm;
sqlCommandWithdraw.Connection.Close();
sqlCommandUpdate.Connection.Open();
sqlCommandUpdate.Parameters["@cardNumber"].Value = Class1.cardNumber;
sqlCommandUpdate.Parameters["@balanceDB"].Value = Class1.cardNumber;
readdata = sqlCommandUpdate.ExecuteReader();
MessageBox.Show(balanceDB +" Successfully Withdrawn");
}
我正在为 ATM 机编写代码,我对提款有点不满意,它看起来不错,但似乎没有改变余额以反映数据库中的提款
我的命令是这样的(更新(
update dbo.Accounts
set balance = @balanceDB
from dbo.ATMCards
INNER JOIN dbo.Accounts ON dbo.ATMCards.accountID = dbo.Accounts.accountID
where (dbo.ATMCards.cardNumber = @cardNumber)
这是我选择数据的命令
select dbo.Accounts.balance
from dbo.ATMCards
INNER JOIN dbo.Accounts ON dbo.ATMCards.accountID = dbo.Accounts.accountID
where (dbo.ATMCards.cardNumber = @cardNumber)
似乎运行得很好,添加了消息框以检查它,感谢您的任何帮助赞赏它!
您正在将信用卡号传递给参数@balanceDB
- 这是第一个错误。其次,不要使用 ExecuteReader
来执行更新 - 请改用ExecuteNonQuery
。
编辑
我会为你做一些清理:
try
{
try
{
sqlCommandWithdraw.Connection.Open();
sqlCommandWithdraw.Parameters["@cardNumber"].Value = Class1.cardNumber;
// Make sure to dispose of the reader, which also closes the reader, which
// is important, because you can't perform any other selects on a connection
// with an open reader!
using (SqlDataReader reader = sqlCommandWithdraw.ExecuteReader())
{
// You will only get one line - also, your code also only evaluates
// one result, so we can do the following:
if (reader.Read())
{
balanceDB = decimal.Parse(readdata["balance"].ToString());
}
}
}
finally
{
sqlCommandWithdraw.Connection.Close();
}
decimal withdrawAmm = Convert.ToDecimal(textWithdraw.Text);
balanceDB = balanceDB - withdrawAmm;
try
{
sqlCommandUpdate.Connection.Open();
sqlCommandUpdate.Parameters["@cardNumber"].Value = Class1.cardNumber;
sqlCommandUpdate.Parameters["@balanceDB"].Value = balanceDB;
sqlCommandUpdate.ExecuteNonQuery();
MessageBox.Show(balanceDB +" Successfully Withdrawn");
}
finally
{
sqlCommandUpdate.Connection.Close();
}
}
您
为 @balanceDB
参数传递了错误的值。它应该是余额金额。但是您正在传递卡号。
sqlCommandUpdate.Parameters["@balanceDB"].Value = Class1.cardNumber;
应改为
sqlCommandUpdate.Parameters["@balanceDB"].Value = balanceDB ;
这行对我来说很可疑:
sqlCommandUpdate.Parameters["@balanceDB"].Value = Class1.cardNumber;
这应该Class1.balance
吗?