想要更改一个数据库行而不是所有数据库行

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)

Kas*_*ash 6

在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)