Mar*_*esp 2 c# t-sql visual-studio-2010
我想更新我的数据库的一行.
这是一台ATM机,您首先输入一个卡帐号(它保存此号码以用于不同的表格).然后输入存款金额.问题是它正在更新每一行而不是与该卡相关联的单行.
这是代码:
sqlCommandDeposit.Connection.Open();
sqlCommandDeposit.Parameters["@cardNumber"].Value = Class1.cardNumber;
using (SqlDataReader reader = sqlCommandDeposit.ExecuteReader())
{
if (reader.Read())
{
balanceDB = decimal.Parse(reader["balance"].ToString());
}
}
}
finally
{
sqlCommandDeposit.Connection.Close();
}
decimal depositAmm = Convert.ToDecimal(textDeposit.Text);
balanceDB = balanceDB + depositAmm;
try
{
sqlDepositupdate.Connection.Open();
sqlDepositupdate.Parameters["@cardNumber"].Value = Class1.cardNumber;
sqlDepositupdate.Parameters["@balanceDB"].Value = balanceDB;
sqlDepositupdate.ExecuteNonQuery();
MessageBox.Show("£" + depositAmm + " Successfully Deposited and Deposit Number Saved");
MessageBox.Show("you have " + "£" + balanceDB + " available");
buttonClear.Enabled = true;
buttonExit.Enabled = true;
buttonMainMenu.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sqlDepositupdate.Connection.Close();
}
Run Code Online (Sandbox Code Playgroud)
这是我的选择声明,以找出当前的余额:
SELECT dbo.Accounts.balance
FROM dbo.ATMCards
INNER JOIN dbo.Accounts ON dbo.ATMCards.accountID = dbo.Accounts.accountID
WHERE (dbo.ATMCards.cardNumber = @cardNumber)
Run Code Online (Sandbox Code Playgroud)
这是更新声明:
UPDATE dbo.Accounts
SET balance = @balanceDB
FROM dbo.ATMCards
INNER JOIN dbo.Accounts AS Accounts_1 ON dbo.ATMCards.accountID = Accounts_1.accountID
CROSS JOIN dbo.Accounts
WHERE (dbo.ATMCards.cardNumber = @cardNumber)
Run Code Online (Sandbox Code Playgroud)
在Update查询中删除Cross Join.你为什么这么做?
UPDATE dbo.Accounts
SET balance = @balanceDB
FROM dbo.ATMCards
INNER JOIN dbo.Accounts AS Accounts_1 ON dbo.ATMCards.accountID = Accounts_1.accountID
WHERE (dbo.ATMCards.cardNumber = @cardNumber)
Run Code Online (Sandbox Code Playgroud)