1

ページを更新するたびにローンの支払い額が 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;
        }
    }
}
4

3 に答える 3

0

また、最後にローンを増やした時期を表に示し、この値も確認する必要があります。lastLoanIncreaseテーブルに新しい列をLoanPortFolio 挿入してchar(6)、月と年を増やしたときに保存できます。次に、再度増加する前に確認してください。

于 2013-07-29T09:21:17.770 に答える
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.
    }
于 2013-07-29T09:23:34.120 に答える
0

あなたは多くの不必要なことをしました。いくつかの重要なチェックが欠けていて、いくつかのパフォーマンスを阻害する間違いがコードにもありましたが、あなたは新入生であり、徐々に学習するので、ここではそれらを指摘しません。

問題の解決策は次のとおりです

  1. まず、「LoanPortfolio」テーブルに「LastUpdatedLoanPaidDate」という新しい列を作成します。この列のタイプは Date である必要があります。これは、最後に $500 を "loanPaid" 列に追加した日付を保存します。

  2. 「LoanPortfolio」テーブルに最初に行を追加するときに、この列を「purchaseDate」と同じに設定します。したがって、最初は「purchaseDate」と「LastUpdatedLoanPaidDate」は同じになります。

  3. "purchaseDate" の代わりに "LastUpdatedLoanPaidDate" のみを取得します。

        cmd2.CommandText = "SELECT DISTINCT LastUpdatedLoanPaidDate FROM LoanPortfolio WHERE (custID LIKE 'OH00002') AND (loanType LIKE 'Personal Loan')";
    
  4. 上記のクエリから取得されるレコードが 1 つだけであると仮定すると、次のコードは毎月 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
        }
    

ご要望によっては見落としがあるかもしれません。また、更新ステートメントはテストしていないため、調整が必要になる場合がありますが、全体的にはこれでうまくいくはずです。

これが役に立ったことを願っています。

よろしく、

サマール

于 2013-07-29T11:41:02.357 に答える