• 使用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


     

  • 相关阅读:
    关于数据库的索引知识
    RESTful API设计相关
    Coroutine(协程)模式与线程
    Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)
    读懂diff
    Linux学习笔记——如何使用echo指令向文件写入内容
    ubuntu中执行定时任务crontab
    网络编程之异步IO,rabbitMQ笔记
    走进docker的世界之入门篇
    xml基础
  • 原文地址:https://www.cnblogs.com/zxd543/p/3957729.html
Copyright © 2020-2023  润新知