首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# OleDbDataReader

C# OleDbDataReader
EN

Stack Overflow用户
提问于 2012-04-22 02:26:48
回答 1查看 7K关注 0票数 0

如何改变这一点:

代码语言:javascript
复制
public void Charge(string bankaccountnumber, decimal moneyamount)
    {
       foreach (Bankaccount bankaccountInProcess in bankaccount)
        {
            if (bankaccountnumber == bankaccountInProcess.Bankaccountnumber)

                bankaccountInProcess.ChargeFromBankAccount(moneyamount);

        }

        return;
}

使用OleDbDataReader而不是那个foreach?

当被要求输入要从银行账户中提取的金额,然后从BalanceAmountAvailableForWithdrawal (以及WholeAccountBalance)中提取的金额时,在控制台中输入金额。但是access文件中没有moneyamount列,只有WholeAccountBalance和BalanceAmountAvailableForWithdrawal currency列。

以下是我如何在类的不同部分中更改它的示例:

代码语言:javascript
复制
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;

    }

到目前为止,我的想法是:

代码语言:javascript
复制
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;

        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-22 05:39:50

如果您的Access表Account有3列:accounNumWholeAccountBalanceBalanceAmountAvailableForWithdrawal,那么您基本上应该这样做(我也对其进行了一些更正和更新)。只要检查它,因为我没有测试它。

代码语言:javascript
复制
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");
                }
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10261756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档