0

これを変更する方法:

public void Charge(string bankaccountnumber, decimal moneyamount)
    {
       foreach (Bankaccount bankaccountInProcess in bankaccount)
        {
            if (bankaccountnumber == bankaccountInProcess.Bankaccountnumber)

                bankaccountInProcess.ChargeFromBankAccount(moneyamount);

        }

        return;
}

そのforeachの代わりにOleDbDataReaderを使用するには?

金額は、銀行口座から引き落とされ、BalanceAmountAvailableForWithdrawal(およびWholeAccountBalance)から引き出される金額を入力するように求められたときに、コンソールに入力されます。ただし、アクセスファイルにはmoneyamount列はなく、WholeAccountBalance列とBalanceAmountAvailableForWithdrawal通貨列のみがあります。

これは、クラスの別の部分でどのように変更したかの例です。

public bool IdentifyUser(string bankAccountnumber, int passWord)
    {


        connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source= C:\\asd.accdb");
            connection.Open();


        OleDbCommand getOne = new OleDbCommand();
        getOne.Connection = connection;
        getOne.CommandText = "SELECT accounNum, pinCode FROM Account WHERE accountNum = '" +
             bankAccountnumber +"'";
        OleDbDataReader readOne = readOne.ExecuteReader();
        if (readOne.Read())
        {
            int GottenPassWord = (int)readOne["pinCode"];
            if (GottenPassWord == passWord)

            return true;
        }

        else
        {
            Console.WriteLine("Account was not found");            
        }
        connection.Close();
        return false;

    }

これが私がこれまでに思いついたものです:

public void Charge(string bankaccountnumber, decimal moneyamount)
    {

        connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source= C:\\asd.accdb");
            connection.Open();

        OleDbCommand getOne = new OleDbCommand();
        getOne.Connection = connection;
        getOne.CommandText = "SELECT accounNum, WholeAccountBalance, BalanceAmountAvailableForWithdrawal FROM Account WHERE accounNum = '" +
             bankaccountnumber + "'";
        OleDbDataReader readOne = readOne.ExecuteReader();
        if (readOne.Read())
        {
        // i dont know what to put here to make this do the same thing as the foreach did

        return;

        }

        else
        {
            Console.WriteLine("Charging did not work");

            return;

        }
}
4

1 に答える 1

1

Accessテーブルにとの3つの列がある場合は、Account基本的に次のようにする必要があります(私も少し修正して更新しました)。私はそれをテストしなかったので、それをチェックしてください。accounNumWholeAccountBalanceBalanceAmountAvailableForWithdrawal

public void Charge(string bankaccountnumber, decimal moneyamount)
{
    using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source= C:\\asd.accdb"))
    {
        connection.Open();

        using (OleDbCommand cmd = new OleDbCommand())
        {
            cmd.Connection = connection;
            cmd.CommandText = "SELECT accounNum, WholeAccountBalance, BalanceAmountAvailableForWithdrawal FROM Account WHERE accounNum = @accNum";
            cmd.Parameters.AddWithValue("@accNum", bankaccountnumber);

            using (OleDbDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())  //assuming accounNum is an unique field (primary key)
                {
                    decimal balanceAmountAvailableForWithdrawal = Convert.ToDecimal(reader["BalanceAmountAvailableForWithdrawal"]);
                    if (balanceAmountAvailableForWithdrawal >= moneyamount)   //check if you can withdraw money
                    {
                        cmd.CommandText = @"UPDATE Account 
                                            SET WholeAccountBalance = WholeAccountBalance - @moneyamount, 
                                                BalanceAmountAvailableForWithdrawal = BalanceAmountAvailableForWithdrawal - @moneyamount 
                                            WHERE accounNum = @accNum";

                        cmd.Parameters.AddWithValue("@moneyamount", moneyamount);

                        int result = cmd.ExecuteNonQuery();

                        if (result == 1)
                            Console.WriteLine("Money withdrawn sucessfully.");
                        else
                            Console.WriteLine("Error while withdrawing, operation has failed.");
                    }
                    else
                    {
                        Console.WriteLine("Not enough money to withdrawn requested ammount.");
                    }
                }
                else
                {
                    Console.WriteLine("Charging did not work");
                }
            }
        }
    }
}
于 2012-04-21T21:39:50.353 に答える