//イベント(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();
}
} |