私のデータベースの1行を更新したいと思います。データベース行を変更したいのですが、すべてを変更したくない
カードの口座番号を最初に入力するATMマシンです(この番号を別のフォームで使用するために保存します)。次に、入金する金額を入力します。問題は、カードが関連付けられている単一の行ではなく、すべての行を更新していることです。ここで
はコードです:
SELECT dbo.Accounts.balance
FROM dbo.ATMCards
INNER JOIN dbo.Accounts ON dbo.ATMCards.accountID = dbo.Accounts.accountID
WHERE (dbo.ATMCards.cardNumber = @cardNumber)
そして、これは、更新ステートメントです:
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();
}
そしてここでは、現在のバランスを見つけるために私のselect文の
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)
本当に、私は彼が入れ子になっているように振る舞うWHERE句でCROSS JOINを使うことを意味していたと思います。問題は、INNER JOINとCROSS JOINの両方を使用していることです。 CROSS JOIN(意図的に物事を複雑にする)を使用してこれを書き換える別の方法: 'UPDATE dbo.Accounts SET balance = @balanceDB FROM dbo.ATMCards CROSS JOIN dbo.Accounts AS Accounts_1 WHERE(dbo.ATMCards.accountID = Accounts_1 .accountID)AND (dbo.ATMCards.cardNumber = @cardNumber) ' – Kash