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); }