0

Я пытаюсь сделать недействительным кеш на основе изменения в строках базы данных. Я достиг успеха, делая то же самое с помощью LINQ с одной и той же базы данных и таблицы, но Iam не в состоянии сделать это в основном путем:Невозможно аннулировать кеш, зависящий от SQL-запроса

Вот код, который я написал, пожалуйста, помогите:

public DataSet GetData(string sqlCmd) 
    { 
     string connectionStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 
     string cacheKey = "test123"; 
     DataSet ds = (DataSet)HttpRuntime.Cache.Get(cacheKey); 
     if (ds != null) 
     { 
      return ds; 
     } 
     SqlCacheDependency sqldep = null; 
     SqlConnection conn = new SqlConnection(connectionStr); 
     SqlCommand cmd = new SqlCommand(sqlCmd, conn); 
     cmd.Notification = null; 
     cmd.NotificationAutoEnlist = true; 
     SqlDataAdapter sqlAd = new SqlDataAdapter(cmd); 
     ds = new DataSet(); 
     sqlAd.Fill(ds); 

     System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(connectionStr); 
     string NotificationTable = "TblMetaData"; 
     if (!System.Web.Caching.SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionStr).Contains(NotificationTable)) 
      System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(connectionStr, NotificationTable); 
     sqldep = new SqlCacheDependency(cmd); 

     HttpRuntime.Cache.Insert(cacheKey, ds, sqldep); 
     return ds; 

    } 

Я использую Sql Server 2005 и используя полностью квалифицированные запросы, которые могут работать с уведомлением команды.

Мой другой код в Linq отлично работает с той же базой данных и таблицей, поэтому нет никакого смысла в Service Broker или других разрешениях, которые не заданы. PLease поможет мне избавиться от этой проблемы.

ответ

1

В этой статье приводятся некоторые шаги по устранению неполадок The Mysterious Notification, а также объяснение того, как все работает, когда помогает понять, почему что-то нарушено. Вы должны подтвердить, что каждая часть машины работает:

  • Проверьте уведомление подписки будет создаваться в sys.dm_qn_subscriptions
  • проверки, что уведомление получает fired
  • проверить, что уведомление получает delivered (вы можете спокойно игнорировать все о маршрутизации и удаленной доставке по этой ссылке, хотя, поскольку SqlDependency всегда локально)

На несвязанной ноте вы можете напрямую использовать LINQ-to-SQL и уведомления о запросах: LinqToCache.

0

Лучшее, что нужно сделать: взглянуть на журнал sql, если возникнет какая-либо проблема с уведомлениями, журнал покажет!

журнал ошибок находится в Program Files \ Microsoft SQL Server \ MSSQL.n \ MSSQL \ LOG \ ERRORLOG и ERRORLOG.n

В моем случае, проблема произошла из-за восстановления базы данных, чтобы решить, журнал показал мне проблему, затем я выполню

use DatabaseName EXEC sp_changedbowner 'sa' 
Смежные вопросы