用户需要授予权限 grant change notification to hfspas;
public void GetDatabaseChange()
{
string sql = "select * from t_prescription_handwork where trunc(checkindate)=trunc(sysdate)";
string constr = ConfigurationManager.ConnectionStrings["oracle"].ConnectionString;
OracleConnection con = new OracleConnection(constr);
con.Open();
OracleCommand cmd = new OracleCommand(sql, con);
OracleDependency dep = new OracleDependency(cmd);
dep.QueryBasedNotification = false;
//是否在Notification中包含变化数据对应的RowId
dep.RowidInfo = OracleRowidInfo.Include;
dep.OnChange += new OnChangeEventHandler(OnDatabaseNotification);
//是否在一次Notification后立即移除此次注册
cmd.Notification.IsNotifiedOnce = false;
//此次注册的超时时间(秒),超过此时间,注册将被自动移除。0表示不超时。
cmd.Notification.Timeout = 0;
//False表示Notification将被存于内存中,True表示存于数据库中,选择True可以保证即便数据库重启之后,消息仍然不会丢失
cmd.Notification.IsPersistent = true;
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Dispose();
}
public void OnDatabaseNotification(object src, OracleNotificationEventArgs args)
{
if (args.Info == OracleNotificationInfo.Insert)
{
DataTable changeDetails = args.Details;
//notificationReceived = true;
string rowid = changeDetails.Rows[0]["rowid"].ToString();
//查找这个对象
PrescriptionHandwork temp = PrescriptionHandwork.FetchPrescriptionHandworkByRowid(rowid);
switch (args.Info)
{
case OracleNotificationInfo.Insert:
UpdateAsyncGridControl(gridOrderlist, temp);
break;
}
}
}
grant change notification to hfspas;