如何每月添加'loanPaid'

时间:2013-07-29 09:11:27

标签: c# asp.net

我遇到的问题是每次刷新页面时,支付的贷款都会增加500.我明白我的逻辑是错误的,从贷款申请日期起1个月后,'loanPaid'将增加500但我想要发生的是每个月它都会增加500美元。如果有人可以帮我逻辑。我会很感激。我在考虑使用一些循环,但不确定哪一个和如何。我只是一名新生,所以请原谅我的编码风格。谢谢


public class LoanDAL
{
    string connString = ConfigurationManager.ConnectionStrings["Oakhorizons"].ToString();
    public LoanDAL()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public DataTable getAllLoanInfoDT()
    {
        using (SqlConnection conn = new SqlConnection(connString))
        {
            DataTable dt = new DataTable();
            SqlCommand cmd2 = new SqlCommand();
            cmd2.Connection = conn;
            // cmd.CommandType = CommandType.StoredProcedure;
            cmd2.CommandText = "SELECT DISTINCT purchaseDate FROM LoanPortfolio WHERE (custID LIKE 'OH00002') AND (loanType LIKE 'Personal Loan')";
            cmd2.Parameters.AddWithValue("@custID", "OH00002");
            cmd2.Parameters.AddWithValue("@loanType", "Personal Loan");
            conn.Open();
            string custID = "OH00002";
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd2;
            da.Fill(dt);
            int iMonthNo = int.Parse(System.DateTime.Now.Month.ToString());
            DateTime dtDate = new DateTime(2000, iMonthNo, 1);
            double dMonthNow = Double.Parse(dtDate.ToString("MM"));
            LoanTableAdapters.LoanPortfolioTableAdapter loanAdapter = new LoanPortfolioTableAdapter();
            string LoanDate = loanAdapter.RetrieveData(custID.ToString()).ToString();
            string month = dt.ToString();

            double dLoanDate = Double.Parse(LoanDate.Substring(3, 2));

            if (dMonthNow > dLoanDate)
            {
                String sql = "UPDATE LoanPortfolio SET loanPaid = loanPaid + 500";
                sql += "WHERE (loanType LIKE 'Personal Loan') AND (custID LIKE 'OH00002')";
                cmd2.Connection = conn;
                cmd2.CommandText = sql;

                cmd2.ExecuteNonQuery();

            }
            conn.Close();
}
}

编辑后:

 public DataTable getAllLoanInfoDT()
{ 
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd2 = new SqlCommand();
        cmd2.Connection = conn;
        // cmd.CommandType = CommandType.StoredProcedure;
        cmd2.CommandText = "SELECT DISTINCT loanUpdateDate FROM LoanPortfolio WHERE (custID LIKE 'OH00002') AND (loanType LIKE 'Personal Loan')"; 
        cmd2.Parameters.AddWithValue("@custID", "OH00002");
        cmd2.Parameters.AddWithValue("@loanType", "Personal Loan");
        conn.Open();
        SqlDataReader myReader = cmd2.ExecuteReader();
        DateTime loanUpdateDate = Convert.ToDateTime(myReader);
        DateTime currDateTime = DateTime.Now;

        int loanToBeAdded = (((currDateTime.Year - loanUpdateDate.Year) * 12) + currDateTime.Month - loanUpdateDate.Month) * 500;
        if (loanToBeAdded > 0)
        {
            String sql = "UPDATE LoanPortfolio SET loanPaid = loanPaid + " + loanToBeAdded.ToString() + ", loanUpdateDate = " + DateTime.Now.ToString();
            sql += " WHERE (loanType LIKE 'Personal Loan') AND (custID LIKE 'OH00002')";

            //Execute the above query here
        }
        conn.Close();

        using (SqlDataAdapter dAd = new SqlDataAdapter("SELECT * FROM LoanPortfolio where custID like 'OH00002'", conn))
        {
            DataTable dTable = new DataTable();
            dAd.Fill(dTable);
            return dTable;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您还应在表格中指明您最后一次增加贷款并检查此值。您可以在lastLoanIncrease表格中插入新列LoanPortFolio作为char(6),并在您增加时保存月份和年份。然后在再次增加之前检查它。

答案 1 :(得分:0)

您不需要循环。

您的问题出在条件if

//DateTime loanDate = new DateTime(2000, 1, 18);
DateTime loanDueDate = Foo.GetLoanDueDate(loanId);

int loanDueMonth = loanDueDate.Month;
int currentMonth = DateTime.Now.Month;

if (currentMonth > loanDueMonth)
    {
        // update db
        loanDate.AddMonths(1);
        Foo.UpdateLoanDueDate(loanId, loanDate); // increase loan due date for next month so that the conditional is true next month.
    }

答案 2 :(得分:0)

你做了很多不必要的事情,一些重要的检查缺失,一些性能也在你的代码中出现了错误,但我不会在这里指出它们,因为你是一个新生,你会逐渐学习。

您的问题的解决方案应该是以下

  1. 首先在“LoanPortfolio”表中创建一个新列,即“LastUpdatedLoanPaidDate”。该类型应为此列的日期。这将存储您上次将$ 500添加到“loanPaid”列的日期。

  2. 首次在“LoanPortfolio”表中添加行时,将此列设置为与“purchaseDate”相同。所以最初“purchaseDate”和“LastUpdatedLoanPaidDate”将是相同的。

  3. 仅提取“LastUpdatedLoanPaidDate”而非“purchaseDate”

        cmd2.CommandText = "SELECT DISTINCT LastUpdatedLoanPaidDate FROM LoanPortfolio WHERE (custID LIKE 'OH00002') AND (loanType LIKE 'Personal Loan')";
    
  4. 假设从上面的查询中只提取了1条记录,以下代码应该每月向“loadPaid”列添加500美元

        //Fetch "LastUpdatedLoanPaidDate" here
    
        //This will be "LastUpdatedLoanPaidDate" coming from database i.e. dt[0][0].ToString(). Hard-coded here for simplicity
        string strLastUpdatedLoanPaidDate = "07/29/2013";
    
        DateTime lastUpdatedLoanPaidDate = Convert.ToDateTime(strLastUpdatedLoanPaidDate);
        DateTime currDateTime = DateTime.Now;
    
        //This will make sure that all the previous purchases are also handled and not just previous month's
        //This is important when you are implementing new logic on existing data
        int loanToBeAdded = (((currDateTime.Year - lastUpdatedLoanPaidDate.Year) * 12) + currDateTime.Month - lastUpdatedLoanPaidDate.Month) * 500;
    
        //If loadToBeAdded is zero then need not update database
        if (loanToBeAdded > 0)
        {
            String sql = "UPDATE LoanPortfolio SET loanPaid = loanPaid + " + loanToBeAdded.ToString() + ", LastUpdatedLoanPaidDate = " + DateTime.Now.ToString();
            sql += " WHERE (loanType LIKE 'Personal Loan') AND (custID LIKE 'OH00002')";
    
            //Execute the above query here
        }
    
  5. 根据您的要求,我可能会遗漏一些东西。此外,更新语句可能需要调整,因为我还没有测试过,但总体来说这应该可以解决问题。

    希望这会有所帮助。

    此致

    萨马