首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-07-01 
C#链接数据库,推送数据现在有这么一个小需求。数据库中有一张表字段为ID,时间....等字段。有人会想这张表中

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();
                }
            }

        }

热点排行