//イベント(Notification)が発生した時の処理 
      public void OnMyNotificaton(object src, 
          OracleNotificationEventArgs arg) 
      { 
        //OracleNotificationEventArgsのROWIDを基に、変更行データを取得 
        foreach (DataRow detailRow in arg.Details.Rows) 
        { 
          string rowid = detailRow["Rowid"].ToString(); 
          string sqlupdate = 
            "SELECT emp.*, emp.rowid FROM emp WHERE rowid = '"  
            + rowid + "'"; 
          OracleConnection con2 = new OracleConnection( 
            "USER ID=scott;DATA SOURCE=ORCL10GR2;PASSWORD=tiger;"  
            + "PERSIST SECURITY INFO=true;"); 
          OracleCommand  cmd2 = new OracleCommand(sqlupdate, con2); 
          con2.Open(); 
          OracleDataReader dr2 = cmd2.ExecuteReader(); 
       
          Int32 iRow; 
          if (dr2.Read()) 
          { 
            //OracleNotificationEventArgs.ResourceNamesよりオブジェクト名を取得 
            string msgtitle = arg.ResourceNames[0].ToString  
              + "が変更されました"; 
            string msgdesc = "EMPNO=" + dr2["empno"].ToString() 
              + " ENAME=" + dr2["ename"].ToString() 
              + "が変更されました。" + "\r\n" + "表示を更新しますか?"; 
       
            if (MessageBox.Show(msgdesc, msgtitle, 
              MessageBoxButtons.YesNo) == DialogResult.Yes) 
            { 
              for (iRow = 0; iRow < gvEmp.Rows.Count; iRow++) 
              { 
                if (gvEmp.Rows[iRow].Cells[0].Value.ToString() == 
                    dr2["empno"].ToString()) 
                { 
                  gvEmp.Rows[iRow].Selected = true; 
                  break; 
                } 
              } 
              //更新されたデータをDataGridViewに表示 
              empOracleDataAdapter1.Fill(emp1.Emp); 
            } 
          } 
          con2.Close(); 
        } 
      } |