读书人

C#链接数据库推送数据解决方案

发布时间: 2013-07-01 12:33:04 作者: rapoo

C#链接数据库,推送数据
现在有这么一个小需求。

数据库中有一张表字段为ID,时间....等字段。
有人会想这张表中插入数据。

是否可以Winform简单的展示这张表的数据。能做只要数据库一插入数据,WinForm就读取出来,而不是WinFrom实时刷新再读取呢?

类似,数据库推送给Winform,让Winfrom来执行刷新???
[解决办法]

引用:
现在有这么一个小需求。

数据库中有一张表字段为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();
}
}

}

读书人网 >C#

热点推荐