none
SqlDependency 这个只能是一次性的吗 RRS feed

  • 问题

  • namespace ConsoleApplication1
    {
        class Program
        {
            private static string _connStr;
            static int i = 0;
            static int maxid = 0;
            static void Main(string[] args)
            {
                _connStr = "";
                SqlDependency.Start(_connStr);//传入连接字符串,启动基于数据库的监听
                UpdateGrid();

                Console.Read();
            }


            private static void UpdateGrid()
            {
                using (SqlConnection connection = new SqlConnection(_connStr))
                {
                    //依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[]
                    using (SqlCommand command = new SqlCommand("SELECT id  FROM [dbo].[adv_CMD]", 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())
                        {
                            int id = int.Parse(sdr["ID"].ToString());
                            if (maxid < id)
                            {
                                maxid = id;
                            }
                            Console.WriteLine("Id:{0} {1}", id,
                                (i++));
                        }
                        sdr.Close();
                    }
                }
            }


            private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
            {
                using (SqlConnection connection = new SqlConnection(_connStr))
                {
                    //依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[]
                    using (SqlCommand command = new SqlCommand("SELECT id  FROM [dbo].[adv_CMD]", connection))
                    {
                        command.CommandType = CommandType.Text;
                        connection.Open();
                        SqlDataReader sdr = command.ExecuteReader();
                        Console.WriteLine();
                        while (sdr.Read())
                        {
                            Console.WriteLine("Id:{0} {1}", sdr["ID"].ToString(),
                                (i++));
                        }
                        sdr.Close();
                    }
                }
            }
        }

    代码如上:第一次插入数据的时候程序是有反应的,为什么 第二次插入的时候没有 反应了呢,难道要重新注册一次?
    • 已移动 eryang 2010年12月14日 4:33 (发件人:.NET Framework 一般性问题讨论区)
    2010年12月6日 3:18