Как отслеживать изменение данных таблицы 2 или 3 с помощью SqlDependency

1

таким образом мы отслеживаем изменение данных таблицы с помощью зависимости sql.

private static void RegisterNotification()
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "SELECT ID, Name FROM dbo.TestTable";
                    dep = new SqlDependency(cmd);
                    dep.OnChange += new OnChangeEventHandler(OnDataChange);
                    SqlDataReader dr = cmd.ExecuteReader();
                    {
                        while (dr.Read())
                        {
                            Console.WriteLine("Name = " + dr[1].ToString());
                        }
                    }
                    dr.Close();
                    Console.WriteLine("Waiting for any data changes...\nPress to end program.");
                    Console.ReadLine();
                }
            }
            finally
            {
                //SqlDependency.Stop(connStr);
            }

        }

таким образом мы укажем sql SELECT ID, Name FROM dbo.TestTable для изменения таблицы. мне нравится знать, нужно ли мне контролировать 2 таблицы, тогда мы можем написать sql, как этот путь

SELECT ID, Name FROM dbo.TestTable1;SELECT ID, Name FROM dbo.TestTable2

и читать данные таблицы таким образом

SqlDataReader dr = cmd.ExecuteReader();
{
     while (dr.Read())
     {
        Console.WriteLine("Name = " + dr[1].ToString());
     }
 }

а затем снова dr.NextResult() и снова прочитайте

 while (dr.Read())
         {
            Console.WriteLine("Name = " + dr[1].ToString());
         }

если я собираюсь в неправильном направлении контролировать несколько изменений данных таблицы, то, пожалуйста, направляйте меня с правильным info.looking для предложения. благодаря

Теги:
sql-server
sqldependency

1 ответ

4

Здесь очень хорошая статья с исходным кодом

Зависимость SQL-кэша от SQL Server, LINQ и ASP.NET 3.5 http://www.dotnetcurry.com/showarticle.aspx?ID=263

Важно (из статьи)

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "TESTSERVER\ASPNET"

С#

protected void Application_Start(object sender, EventArgs e)
{
SqlDependency.Start(ConfigurationManager.ConnectionStrings["pubsConnectionString"].ConnectionString);
}

Следующий код также останавливает прослушиватель:

protected void Application_End(object sender, EventArgs e)
{
SqlDependency.Stop(ConfigurationManager.ConnectionStrings["pubsConnectionString"].ConnectionString);
}
  • 0
    вероятно, вы не понимаете мое требование. Предположим, если у меня есть 3 таблицы, которые не имеют никакого отношения друг к другу, то как я могу отслеживать изменения этих 3 таблиц с помощью SQL-зависимости? если ты знаешь, тогда приходи с решением. Спасибо
  • 1
    Вы можете использовать этот msdn.microsoft.com/en-us/library/…. Класс AggregateCacheDependency отслеживает коллекцию объектов зависимостей, поэтому при изменении любого из них кэшированный элемент автоматически удаляется. Объектами в массиве могут быть объекты CacheDependency, объекты SqlCacheDependency, пользовательские объекты, производные от CacheDependency, или любая их комбинация.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню