簡體   English   中英

C#更新數據庫錯誤

[英]C# update database error

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嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM