我有一个控制台应用程序。

我想继续观察数据库表中特定列的更改。

我通过互联网阅读,发现sql依赖对我有好处。我开始学习它,并做了以下工作:


创建一个类。
在构造函数中,我调用了静态函数start,并调用了具有所有sql依赖项设置的函数。


我的问题

当我使用start运行应用程序时,单击Visual Studio 2013,该应用程序将运行,然后停止。但是,我需要的是这些应用程序可以开始运行,并一直在监视数据库表中的更改。

请问你能帮帮我吗?

码:

这是非常非常简单的C#代码。

public class MyListener
    {
        public MyListener()
        {
            SqlDependency.Start(getConnectionString());
            this.listen();
        }

        private string getConnectionString()
        {
            return ConfigurationManager.ConnectionStrings["popup"].ConnectionString.ToString();
        }
        private void listen()
        {
            string query = "SELECT CallerID FROM TransferToSIP WHERE hasBeenRead = 0";
            SqlConnection con = new SqlConnection(getConnectionString());
            SqlCommand cmd = new SqlCommand(query, con);
            con.Open();
            using (cmd)
            {
                SqlDependency dependency = new SqlDependency(cmd);
                dependency.OnChange += new
                   OnChangeEventHandler(OnDependencyChange);
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                }
            }
        }
        void OnDependencyChange(object sender, SqlNotificationEventArgs e)
        {
            Console.WriteLine("Roma");
        }
        void Termination()
        {
            SqlDependency.Stop(getConnectionString());
            Console.Read();
        }

最佳答案

问题在于没有重新申请。您应该在listen内部调用OnDependencyChange方法。我知道这很奇怪,但是它是SqlDependency类。

07-28 03:26