C#链接数据库,推送数据
现在有这么一个小需求。
数据库中有一张表字段为ID,时间....等字段。
有人会想这张表中插入数据。
是否可以Winform简单的展示这张表的数据。能做只要数据库一插入数据,WinForm就读取出来,而不是WinFrom实时刷新再读取呢?
类似,数据库推送给Winform,让Winfrom来执行刷新???
[解决办法]
其实就是数据库依赖。
让你的winform程序依赖于数据库。
可以这么实现,
第一:定时去读数据库。如果存在数据就刷新。
第二:数据表上做触发器,当插入数据时触发,然后可以让触发器写入文件,winform程序监控文件。
我就想这两种方法。
[解决办法]
这个当然不能用客户端去扫描了。而是做一个服务器端,服务器端和客户端直接联系。
服务器端负责去检查数据库的操作。然后推送给客户端。
[解决办法]
SqlDependency无压力
public void UpdateGrid()
{
using (SqlConnection connection = new SqlConnection(_connStr))
{
using (SqlCommand command = new SqlCommand("select terminal,gun_state FROM aaa", connection))
{
command.CommandType = CommandType.Text;
connection.Open();
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
list_old = new List<dosoft.Model.GunState>();
SqlDataReader dr = command.ExecuteReader();
while (dr.Read())
{
//第一次
var m = new dosoft.Model.GunState();
m.gun_state = int.Parse(dr["gun_state"].ToString());
m.terminal = dr["terminal"].ToString();
list_old.Add(m);
}
dr.Close();
connection.Close();
}
}
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
System.Threading.Thread.Sleep(2000);
Console.WriteLine("dependency_OnChange");
using (SqlConnection connection = new SqlConnection(_connStr))
{
using (SqlCommand command = new SqlCommand("select terminal,gun_state FROM aaa", connection))
{
command.CommandType = CommandType.Text;
connection.Open();
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
SqlDataReader dr = command.ExecuteReader();
list_new = new List<dosoft.Model.GunState>();
while (dr.Read())
{
var m = new dosoft.Model.GunState();
m.gun_state = int.Parse(dr["gun_state"].ToString());
m.terminal = dr["terminal"].ToString();
list_new.Add(m);
}
dr.Close();
//逻辑判断
for (int i = 0; i < list_new.Count; i++)
{
var a = list_old[i].gun_state;
var b = list_new[i].gun_state;
if (b == 1 && a != 1)
{
// saveImage(list_new[i]);
}
}
list_old = list_new;
connection.Close();
}
}
}