private void StartDependency(SqlDependencyQualifiedObjectName table, SqlConnection conn = null)
        {
            // Execute
            var newConnection = conn == null;

            conn = conn ?? new SqlConnection(Parameters.ConnectionString);
            try
            {
                var cmdText = string.Format(CultureInfo.InvariantCulture,
                                            @"SELECT [ObjectId], [ObjectName], [LastInsertDate], [LastUpdateDate], [LastDeleteDate]
						FROM {0}
						WHERE [ObjectName] = '{1}'"                        ,
                                            Parameters.Options.ChangeHolderTable.AlternateFullName, table);

                using (var cmd = new SqlCommand(cmdText, conn))
                {
                    // Ensure connection
                    Helper.EnsureOpenConnection(conn);

                    // Properties
                    cmd.CommandType = CommandType.Text;

                    // Set cmd notification to null
                    cmd.Notification = null;

                    // Dependency
                    var sqlDependency = new SqlDependency(cmd);
                    sqlDependency.OnChange += OnSqlDependencyChanged;

                    // Execute reader
                    using (var dataTable = new DataTable())
                    {
                        dataTable.Locale = CultureInfo.InvariantCulture;
                        using (var dataAdapter = new SqlDataAdapter(cmd))
                        {
                            dataAdapter.Fill(dataTable);
                        }
                    }

                    // Add
                    using (new MonitorLock(_dependencies))
                    {
                        _dependencies[table] = sqlDependency;
                    }
                }
            }
            finally
            {
                if (newConnection)
                {
                    conn.Dispose();
                }
            }
        }
 /// <summary>
 /// Stops dependency on a table
 /// </summary>
 private SqlDependencyQualifiedObjectName StopDependency(SqlDependency dependency, SqlDependencyQualifiedObjectName table = null)
 {
     dependency.OnChange -= OnSqlDependencyChanged;
     using (new MonitorLock(_dependencies))
     {
         if (table == null)
         {
             table = _dependencies.Where(kv => kv.Value == dependency).Select(kv => kv.Key).SingleOrDefault();
         }
         if (table != null)
         {
             _dependencies.Remove(table);
         }
     }
     return(table);
 }