sqlserver中的数据刷新的问题SqlDependency

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
private static string connectionString = ConfigurationManager.ConnectionStrings[“ConnStr”].ToString();
static void Main(string[] args)
{
SqlDependency.Start(connectionString);//传入连接字符串,启动基于数据库的监听
UpdateGrid();
Console.Read();
}

   private static void UpdateGrid()  
    {  
        using (SqlConnection connection = new SqlConnection(_connStr))  
        {  
            //依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[]  
            using (SqlCommand command = new SqlCommand("select ID,UserID,[Message] From [dbo].[Messages]", connection))  
            {  
                command.CommandType = CommandType.Text;  
                connection.Open();  
                SqlDependency dependency = new SqlDependency(command);  
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);  

               SqlDataReader sdr = command.ExecuteReader();  
               Console.WriteLine();  
               while (sdr.Read())  
               {  
                   Console.WriteLine("Id:{0}\tUserId:{1}\tMessage:{2}",sdr["ID"].ToString(), sdr["UserId"].ToString(),   

sdr[“Message”].ToString());
}
sdr.Close();
}
}
}

    private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)  
    {  
        UpdateGrid();  
    }  

}

https://bbs.csdn.net/topics/392303039

例子:https://blog.csdn.net/u012183487/article/details/77776930

sql语句

CREATE TABLE [dbo].[Messages](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] varchar COLLATE Chinese_PRC_CI_AS NOT NULL,
[Message] nvarchar COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_Messages] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]
)
解释与注意的:SqlDependency的sql语句比较严格列名必须写,不能用*,不能用top,不能用函数,包括聚合函数,不能用子查询,包括where后的子查询,不能用外连接,自连接,不能用临时表,不能用变量,不能用视图,不能垮库,而且表名之前必须加类似dbo这样的前缀等等
你说的轮训根本不会,只有第一次的时候才会把全部读一下,之后只有更新的才能被读到,你不放心的话可以自己测试下,也可以自己家WHERE条件 ID大于多少多少这样。。。

----写了一些代码,感觉像是利用command执行数据库然后就会插入消息队列,数据库有数据更新就会通知这个消息并从队列中移除。需要再执行一次数据库来重新插入一条消息。应该说是订阅,每次通过command订阅一次。但是下面的SelectedIndex我就不太清楚了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值