Невозможно аннулировать кеш, зависящий от запроса SQL
-
30-09-2019 - |
Вопрос
Я пытаюсь аннулировать кэш на основе изменения в рядах базы данных. Я добился успеха, делая то же самое с LINQ с той же базой данных и таблицей, но я не могу сделать это основным способом:
Вот код, который я написал, пожалуйста, помогите:
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 идеально подходит с той же базой данных и таблицей, поэтому нет никакого смысла в отношении сервисного брокера или других разрешений, не установленных. Пожалуйста, помогите мне избавиться от этой проблемы.
Решение
В этой статье есть некоторые шаги по устранению неполадок Таинственное уведомление, наряду с объяснением, как работают вещи, которые помогают, где пытаться понять, почему что -то сломано. Вы должны подтвердить, что каждый кусок механизма работает:
- Проверьте уведомление о подписке создается в
sys.dm_qn_subscriptions
- Убедитесь, что уведомление получает уволенный
- Убедитесь, что уведомление получает доставлен (Тем не менее, вы можете безопасно игнорировать все о маршрутизации и удаленной доставке в этой ссылке, поскольку SQLdePendency всегда локально)
На несвязанном примечании вы можете напрямую использовать уведомления LINQ-TO-SQL и запроса: Linqtocache.
Другие советы
Лучшее, что можно сделать: взглянуть на журнал SQL, если возникают какие -либо проблемы с уведомлениями, журнал покажет!
Журнал ошибок находится в программных файлах Microsoft SQL Server MSSQL.N MSSQL LOG ERRORLOG и ERRORLOG.N
В моем случае проблема возникла из -за восстановления базы данных, чтобы решить, журнал показал мне проблему, тогда я выполняю
use DatabaseName EXEC sp_changedbowner 'sa'