views:

298

answers:

1

Hey eveyone..

I would like to make use of SQL Server notifications to capture insert events at my database within a winforms app. I am attempting to use the SQLDependency object. The MSDN articles make this seem pretty straight forward. So I have created a little example application to give it a try. The event only seems to fire as I enter my application the first time(MessageBox appears). Inserting data into the table does not raise the OnChange event it would seem. Can someone tell me what I'm missing? Thanks!

 public Main()
    {
        InitializeComponent();
        var check = EnoughPermission();
        SqlDependency.Stop(constr);
        SqlDependency.Start(constr);
        if(connection == null)
        {
            connection = new SqlConnection(constr);
        }
        if(command == null)
        {
            command = new SqlCommand("Select ID, ChatMessage FROM dbo.Chat",connection);
        }
        connection.Open();
        command.Notification = null;
        SqlDependency dependency = new SqlDependency(command);
        dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
        command.ExecuteReader();
    }





    private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        MessageBox.Show("Change!");
    }
+1  A: 

Your first notification is the only notification you'll get. Query Notifications are not a subscription for changes, once a notification is fired it is also invalidate. You are supposed to re-submit a new notification subscription.

If your query is notified immedeatly it means you did not get a notification for a change, but one for an invalid query. Check the values of the SqlNotificationEventArgs argument you receive. Check the Info to be Insert/Update/Delete, check the Source to be Data, check the Type to be Change.

Have a look at the Watcher Application example to better understand how you are supposed to re-subscribe when notified. For a better understanding of how the Query Notifications work, see The Mysterious Notification.

Remus Rusanu
So my Select is invalid? The info property has 'invalid'. Thanks Ill take a look at these links you sent!
Nick
The SELECt per se looks valid to me, but there are about a mirriad more criteria. See http://msdn.microsoft.com/en-us/library/ms181122(SQL.90).aspx
Remus Rusanu