Должен объявить скалярную переменную - dapper с asp. net core - PullRequest
0 голосов
/ 01 апреля 2020

Это мой первый изумительный опыт. Я прочитал предложения здесь, но ни одна из них, похоже, не исправила мою проблему.

Must declare the scalar variable "@tranAmount".

Некоторые предложили, если рассматриваемая переменная равна нулю. но я проверил, это не нуль.

Я надеюсь, что кто-то может помочь указать на то, что я делаю неправильно.

public void RunEndOfDays()
        {
            try
            {
                IEnumerable<Loan> loans = null;
                var currentMonth = DateTime.Now.Month; //current month
                var currentYear = DateTime.Now.Year;

                using (var conn = new SqlConnection(ConnectionString))
                {
                    conn.Open();

                    loans = conn.Query<Loan>("Select * from Loan");

                    foreach (var loan in loans)
                    {
                        //now calculate the interest for this item
                        var interestInPercentage = loan.InterestRate / 100;
                        var interestPerDay = interestInPercentage / 365; //saved
                        var interestAmountPerDay = loan.AmountWrittenOff * interestPerDay;
                        var tranAmount = loan.AmountWrittenOff + interestAmountPerDay;//saved
                        var tranDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFF");
                        var loanAccountNo = loan.LoanAccountNo;
                        var originalLoanAmount = loan.OriginalLoanAmount;
                        var narration = loan.WrittenOffReason;


                        var addDailyInterest = @"INSERT INTO DailyInterest(LoanAccountNo,
                                                                        TranAmount,
                                                                        InterestRatePerDay,
                                                                        interestPerDay,
                                                                        AmountPerDay,
                                                                        OriginalLoanAmount,
                                                                        Narration,
                                                                        TranDate) VALUES(@loanAccountNo,
                                                                                         @tranAmount,
                                                                                         @interestInPercentage
                                                                                         @interestPerDay,
                                                                                         @interestAmountPerDay,
                                                                                         @originalLoanAmount,
                                                                                         @narration,
                                                                                         @tranDate)";
                        //conn.Open();
                        conn.Execute(addDailyInterest, loans);

                    }

                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.ToString());

            }

        }

Спасибо

1 Ответ

1 голос
/ 02 апреля 2020

Свойство tranAmount не существует в вашем классе Loan (который вы передаете в запрос вставки).

conn.Execute(addDailyInterest, loans);

Это фактически передает список, который вы только что возвращается к запросу вставки, в результате чего вы видите исключение.

Вы должны создать новый анонимный объект, соответствующий @ params, например:

conn.Execute(addDailyInterest, new { loanAccountNo, tranAmount , interestInPercentage, ...etc });

...