Dies ist meine erste adrette Erfahrung. Ich habe hier Vorschläge gelesen, aber keiner scheint mein Problem zu beheben.
Must declare the scalar variable "@tranAmount".
Einige schlugen vor, wenn die fragliche Variable null ist. aber ich habe überprüft, es ist nicht null.
Ich hoffe, jemand könnte darauf hinweisen, was ich falsch mache.
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());
}
}
Vielen Dank
Die Eigenschaft tranAmount
ist in Ihrer Loan
Klasse nicht vorhanden (die Sie an die Einfügeabfrage übergeben).
conn.Execute(addDailyInterest, loans);
Dadurch wird die gerade abgefragte Liste an die Einfügeabfrage zurückgegeben, was zu der angezeigten Ausnahme führt.
Sie sollten ein neues anonymes Objekt erstellen, das mit den @ -Parametern wie folgt übereinstimmt:
conn.Execute(addDailyInterest, new { loanAccountNo, tranAmount , interestInPercentage, ...etc });