SqlDependency

Krzysztof Pe
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:78
0

Cześć,

Mam do zaimplementowania rozwiązanie opisanie w tym wątku Service Broker i application notification . Chcę wypróbować SqlDependency i mam problem z poprawną implementacją tego rozwiązania, aby aplikacja konsolowa działała cały czas w tle i wykonywała pewne akcje tylko w momencie wystąpienia eventu OnChange. Na ten moment aplikacja przechodzi raz i wyłącza się. Co robię źle?

Kopiuj
    public class Listener
    {
        const string sampleConnectionString = @"connection string";
        const string notificationQuery = "SELECT [ID],[Name] FROM [dbo].[tblUsers]";

        public Listener()
        {
            SqlDependency.Start(sampleConnectionString);

            Listen();
        }

        private void Listen()
        {
            using (var connection = new SqlConnection(sampleConnectionString))
            {
                SqlCommand command = new SqlCommand(notificationQuery, connection);
                connection.Open();

                using (command)
                {
                    SqlDependency dependency = new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);

                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                    }
                }
            }
        }

        private void OnDependencyChange(object sender, SqlNotificationEventArgs e)
        {
            var s = sender;
            var eventArgs = e;

            Console.WriteLine("Record added");

            Listen();
        }
}
edytowany 2x, ostatnio: ŁF
creyn
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:6
0

Hej,

Jeżeli dobrze rozumiem, SqlDependency działa? Wyświetla się raz "Record added"?

Jeżeli nie i nic się nie wyświetla to może aplikacja zamyka się zanim EventHandler będzie wywołany. Proces może się skończyć szybciej. Daj w main: Console.ReadLine na końcu dla testu.

Kodzik wygląda ok, tylko dla porządku warto wyrejestrować handler przed ponownym dodaniem:
((SqlDependency)sender).OnChange -= OnDependencyChange;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.