• C# 监控Oracle数据变化


    用户需要授予权限 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;
     
  • 相关阅读:
    如何用 Gerrit 提交代码到服务器
    营收奇迹:三消游戏Candy Crush Saga成功启示录
    flash进阶之路
    Flash笔记之swf居中和swf获取页面参数游戏全屏显示
    如何做一款成功的APP应用
    演义群侠扫盲
    笔记二 air android处理用户交互
    可以准备很多字体,玩家选择性下载
    AIR中调用exe或者bat可执行文件
    很好用的工具类
  • 原文地址:https://www.cnblogs.com/devgis/p/14180860.html
Copyright © 2020-2023  润新知