我现在正在尝试为银行MS进行计算,我想从数据库中读取应计利息,然后在执行下一次读取之前更新值,而我目前已经在while循环中尝试了此操作,其中命令文本无法读者打开时更改,因此将无法使用任何想法/解决方案。 我曾考虑过使用数组来保存数据,但不确定如何在读取后将其过滤掉
更新:在以数组形式引入缓存之后,我试图执行更新,它说不存在这样的列product.prodid,尽管确实可以从中读取
更新2:现在,代码已更新到数据库,但是由于某些原因,它不正确地更新了数据库,因为它将相同的值存储在“应计”列中,而不是每个单独的值中,我可以将此错误本地化到两个for循环中,我认为是一种解决方案可以使用J作为参数,并使其等于帐户ID,以确保每一行都更新,然后更新下一行,这行得通吗?
private void Btn_AccInt_Click(object sender, EventArgs e)
{
connection.Open();
command = connection.CreateCommand();
int max = 0;
double IntAccint = 0.0;
command.CommandText = "SELECT balance, accrued, intrate FROM account, product WHERE account.prodid = product.prodid;";
reader = command.ExecuteReader();
double[] storedrate = new double[100];
while (reader.Read())
{
string AccIntrest, AccBal, Intrate;
AccBal = reader[0].ToString();
AccIntrest = reader[1].ToString();
Intrate = reader[2].ToString();
double IntAccbal, IntIntrat;
IntAccbal = double.Parse(AccBal);
IntAccint = double.Parse(AccIntrest);
IntIntrat = double.Parse(Intrate);
IntAccint = IntAccint + ((IntAccbal * IntIntrat) / 365);
for (int i = 0; i < reader.StepCount; i++)
{
storedrate[i] = IntAccint;
max = reader.StepCount;
}
}
reader.Close();
Update = connection.CreateCommand();
for (int j = 0; j < max; j++ )
{
Update.CommandText = "UPDATE account SET accrued = @Accured";
IntAccint = storedrate[j];
Update.Parameters.AddWithValue("Accured", IntAccint);
Update.ExecuteNonQuery();
}
}