• 基于server broker 的数据实时更新


    Service Broker介绍:SQL Server Service Broker 为消息和队列应用程序提供 SQL Server 数据库引擎本机支持。这使开发人员可以轻松地创建使用数据库引擎组件在完全不同的数据库之间进行通信的复杂应用程序。开发人员可以使用 Service Broker 轻松生成可靠的分布式应用程序。使用 Service Broker 的应用程序开发人员无需编写复杂的内部通信和消息,即可跨多个数据库分发数据工作负荷。因为 Service Broker 会处理会话上下文中的通信路径,所以这就减少了开发和测试工作。同时还提高了性能。例如,支持网站的前端数据库可以记录信息并将进程密集型任务发送到后端数据库以进行排队。Service Broker 确保在事务上下文中管理所有任务以确保可靠性和技术一致性。

    进行开发测试的一个简单的例子:

    1. 创建数据库以及进行设置启用service broker 的脚本如下:

    create database demoapp

    ALTER DATABASE demoapp SET   // 启用service broker
    ENABLE_BROKER
    GO

    CREATE TABLE [dbo].[test](
        [test] [varchar](50) NOT NULL,
     CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
    (
        [test] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    2. ADO.NET 的测试代码:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string con=@"Data Source=.sqlexpress;Initial Catalog=demoapp;Integrated Security=True";
            private void button1_Click(object sender, EventArgs e)
            {
                SqlDependency.Start(con);
                updateData();
            }

            public  void updateData()
            {
                string strSQL = "select test from dbo.test";
                SqlDataAdapter da = new SqlDataAdapter(strSQL, con);
                SqlDependency dependency = new SqlDependency(da.SelectCommand);  /// 数据追踪的实时更新操作
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                DataTable dt = new DataTable();
                da.Fill(dt);
                if (dataGridView1.InvokeRequired)
                {
                dataGridView1.BeginInvoke(new ThreadStart(()=>this.dataGridView1.DataSource=dt));
                }
                else
                {
                 dataGridView1.DataSource = dt;
                }
              

            }

          public  void dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {

                updateData();
            }
        }

    以上为全部的客户端的代码:

    3. 测试结果演示

    开始数据

    当进行数据操作的时候的数据

    我执行的sql 命令

    insert into test values(' demo first app');

    insert into test values(' demo second app');

    客户端的实时数据更新


          

     4. 使用的场景

         SqlDependency 被设计为用在 ASP.NET 或中间层服务中,这里对数据库有活动依赖项的服务器的数量相对较少。它不应用在客户端应用程序中,因为其中可能有成百上千个客户端计算机将为单个数据库服务器建立 SqlDependency 对象。

     注意上面的使用场景是比较重要的。

  • 相关阅读:
    ORA-01935: missing user or role name
    ORA-00923: FROM keyword not found where expected
    ORA-00933: SQL command not properly ended
    ORA_12514:TNS:listener does not currently know of service requested in connect descriptor
    ORA-00918: column ambiguously defined
    ORA-01789: 查询块具有不正确的结果列数
    ORA-01789: query block has incorrect number of result columns
    ORA-01747
    ORA-01843: not a valid month
    ORA-00904: "I_LEVEL": invalid identifier
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/3721044.html
Copyright © 2020-2023  润新知