zoukankan      html  css  js  c++  java
  • 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;
     
  • 相关阅读:
    软件项目开发典型风险一览
    删除数据库所有表数据
    今天愚人节,教大家一个真正的最强整人方法
    潘正磊谈微软研发团队管理之道(下)
    追MM与23种设计模式
    22个所见即所得在线 Web 编辑器
    神奇的js代码,图片全都飞起来了
    字体 小 中 大
    使用ODP.NET连接Oracle数据库一个OracleCommand运行多条SQL语句的方法
    删除SQL数据库中所有的表
  • 原文地址:https://www.cnblogs.com/devgis/p/14180860.html
Copyright © 2011-2022 走看看