• 使用SqlServer2005 Service Broker 和 SqlDependency类提供数据更改的通知


     /*注意
             * 使用SqlServer2005 Service Broker 和 SqlDependency类提供数据更改的通知,注意一下几点
             * 1.检测是否已经启用Service Broker 
             *   Select DATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled')  -- 1 表示已经启用 0 表示没有启用
             * 2.启用Service Broker 
             *    ALTER DATABASE 数据库名称 SET ENABLE_BROKER; 
             * 3..给您的数据库访问帐号授予权限(sa除外,用其他帐号)
             *    GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 账户
             * 注意
             *  使用 SqlDependency 订阅查询通知必须向SQL Server Service Broker提供制定规则的查询语句,
             *  一般来讲,必须是简单的sql查询语句(不能用*,不能用top,不能用函数,包括聚合函数,不能用子查询,
             *  包括where后的子查询,不能用外连接,自连接,不能用临时表,不能用变量,不能用视图,不能垮库,
             *  表名之前必须加类似dbo数据库所有者这样的前缀)
    */

    添加事件

      //检测数据的变化
            private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {
                InitJsonToDataTable();
            }
    View Code

    上述事件引用方法

      /// <summary>
            /// 第一次加载时候调用
            /// </summary>
            public static void InitJsonToDataTable()
            {
                DataTable dtJSON = CheckJsonChange();
                BindGridOrder(0);
    
                //传递一个方法,处理JSON转DataTable入库(应用数据字典详细找不见数据)
                //JSON json = new JSON();
                //json.GetJSONDataTable(dtJSON);
    
                JsonToObjectClass jsonToObject = new JsonToObjectClass();
                jsonToObject.GetJSONDataTable(dtJSON);
            }
    View Code

    检测数据库数据的变化

     /// <summary>
            /// 检测数据库JSON数据的改变
            /// </summary>
            private static DataTable CheckJsonChange()
            {
                //订单类型(Order:点餐)
                string Type = "Order"; 
                //JSON数据状态(0:未处理,1:已经处理)
                int status = 0;
                string _connStr = DBUtility.PubConstant.ConnectionString;
                string _strSelect = "SELECT Type,JSON,chbId FROM [dbo].[chb_synLog] WHERE Type='" + Type + "' AND status="+status+" ";
                SqlDependency.Start(_connStr);
    
                using (SqlConnection conn = new SqlConnection(_connStr))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        conn.Open();
                        SqlCommand cmd = new SqlCommand(_strSelect, conn);
                        SqlDependency dependency = new SqlDependency(cmd);
                        dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                        SqlDataAdapter sda = new SqlDataAdapter(cmd);
                        sda.Fill(ds);
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
    
                    return ds.Tables[0];
                }
            }
    View Code


     

  • 相关阅读:
    linux gcc安装
    重装win7后如何恢复ubuntu引导
    Eclipse搭建Android开发环境(安装ADT,Android4.4.2)
    mysql变量使用总结
    最快得到MYSQL两个表的差集
    mysqldb
    更改时间 (时分秒)
    使用命令转移文件
    报喜啦~过了!
    Jmeter接口测试示例
  • 原文地址:https://www.cnblogs.com/zxd543/p/3957729.html
Copyright © 2020-2023  润新知