2017-03-20 16 views
-1

表に問合せを行い、一部のフィールドから取得したデータに暗号化機能を適用した後、Oracle Database表を更新したいとします。しかし、(下)私のコードは正常に動作しません。Oracle Database表のデータが完全に更新されていません

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(); 
     } 

は、私はすべてのエラーを受信しませんが、プログラムはすべて暗号化された値を持つ唯一の最後のレコードを暗号化します。私はすべての行を暗号化したい。

+2

このような質問をしたときに、何がエラーであるのかを説明することがまず必要です。 – Steve

+0

私は更新ロジックがループ内にある必要があると推測していますので、行ごとに1回実行されます。 –

+0

usingステートメントブロックにはOpenおよびその他の呼び出しのみが含まれていると思います。だから接続とエラーの多く。 – Steve

答えて

0

は、「私はすべてのエラーを受け取るdidentが、プログラムはすべて暗号化された値によってのみ最後のレコードを暗号化し、」あなたのコードのロジックだ

。基本的に、何をやっていることはこれです:

loop 
    read one row 
    encrypt one row 
end loop 
update one row 

「私は、行単位で暗号化する」

それが実行されるようにだからあなたは、ループに更新ロジックを移動する必要があります各行について。

より良い解決策は、行ごとの処理をセット操作に置き換えることですが、それは別の質問です。

+0

非常にありがとう、それはあなたのアドバイスによってうまく動作します – Msama

関連する問題