wpf 轮询mysql数据库_WPF非轮询方式实时更新数据库变化SqlDependency

本文介绍了一个C#页面如何通过SqlDependency实现实时监听数据库变化,并在数据更新时安全地更新用户界面。重点在于数据库事件触发的UpdateUI方法和使用SqlDependency对特定表的监视。
摘要由CSDN通过智能技术生成

public partial class Page1 : Page

{

private static string connStr;

SqlDataReader sdr;

public Page1()

{

InitializeComponent();

connStr = 数据库连接字符串

SqlDependency.Start(connStr);//传入连接字符串,启动基于数据库的监听

UpdateUI();

}

private void UpdateUI()

{

using (SqlConnection connection = new SqlConnection(connStr))

{

//依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[]

//获取要监控的数据内容,这里只监控一条数据

using (SqlCommand command = new SqlCommand("select ID,UserID,[Message] From [dbo].[Messages] where ID=2", connection))

{

command.CommandType = CommandType.Text;

connection.Open();

SqlDependency dependency = new SqlDependency(command);

//当后台数据库发生变化时,触发该事件

dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

sdr = command.ExecuteReader();

while (sdr.Read())

{

//线程安全,使用Dispatch线程更新界面

DispatchUpdateUI(sdr);

}

sdr.Close();

}

}

}

private void DispatchUpdateUI(SqlDataReader sdr)

{

try

{

tbxUserID.Dispatcher.Invoke(new UpdatetbxUserDelegate(UpdatetbxUserIDAction));

tbxMessage.Dispatcher.Invoke(new UpdatetbxMessageDelegate(UpdatetbxMessageAction));

}

catch (Exception ex)

{

throw ex;

}

}

private delegate void UpdatetbxUserDelegate();

private delegate void UpdatetbxMessageDelegate();

private void UpdatetbxUserIDAction()

{

tbxUserID.Text = sdr["UserID"].ToString();

}

private void UpdatetbxMessageAction()

{

tbxMessage.Text = sdr["Message"].ToString();

}

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)

{

UpdateUI();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值