我想在查询表并对某些字段中检索到的数据应用加密函数后更新Oracle数据库表。但是,我的代码(如下)无法正常工作:
private void button2_Click(object sender, EventArgs e)
{
using (OracleConnection conn = new OracleConnection(oradb))
conn.Open();
OracleCommand select = new OracleCommand("select empno,FNAME,LNAME from employee", conn);
OracleDataReader reader = select.ExecuteReader();
Int64 vempno = 0;
String fnameValue = "";
String lnameValue = "";
String afterConcatfname = "";
String afterConcatlname = "";
if (reader.HasRows)
{
while (reader.Read())
{
vempno = reader.GetInt64(0);
fnameValue = reader.GetString(1);
lnameValue = reader.GetString(2);
REA rea = new REA();
afterConcatfname = rea.Encrypt(fnameValue, rea.GenerateKey());
afterConcatlname = rea.Encrypt(lnameValue, rea.GenerateKey());
}
reader.Close();
}
OracleCommand update = new OracleCommand("update employee set fname =:fname, lname =:lname where empno =:empno", conn);
OracleParameter fname = new OracleParameter("fname", afterConcatfname);
OracleParameter lname = new OracleParameter("lname", afterConcatlname);
OracleParameter empno = new OracleParameter("empno", vempno);
update.Parameters.Add(fname);
update.Parameters.Add(lname);
update.Parameters.Add(empno);
update.ExecuteNonQuery();
}
我没有收到任何错误,但程序只加密包含所有加密值的最后一条记录。我想加密每一行。
答案 0 :(得分:0)
“我dident收到任何错误,但程序只加密所有加密值的最后一条记录”
这是你的代码的逻辑。基本上,你正在做的是:
loop
read one row
encrypt one row
end loop
update one row
“我想逐行加密”
因此,您需要将更新逻辑移动到循环中,以便为每一行执行。
更好的解决方案是使用set操作替换逐行处理,但这是一个不同的问题。